打印列表中的列表,每个列表单独一行

22

我有一个列表的列表:

a = [[1, 3, 4], [2, 5, 7]]

我希望输出的格式如下:

1 3 4
2 5 7
我已经尝试了以下方法,但输出结果不是我想要的方式:
for i in a:
    for j in i:
        print(j, sep=' ')

输出:

1
3
4
2
5
7

print 调用更改为使用 end :

for i in a:
    for j in i:
        print(j, end = ' ')

输出:

1 3 4 2 5 7

有任何想法吗?

9个回答

32

遍历原始列表中的每个子列表,并在print调用中使用*展开它:

a = [[1, 3, 4], [2, 5, 7]]
for s in a:
    print(*s)

默认情况下,分隔符被设置为' ',因此无需显式提供。 这将打印出:
1 3 4
2 5 7

在你的方法中,你在每个子列表中迭代每个元素,并逐个打印。通过使用print(*s),你可以在打印调用内部解包列表,这基本上等同于:
print(1, 3, 4)  # for s = [1, 3, 4]
print(2, 5, 7)  # for s = [2, 5, 7]

你如何在没有使用库的情况下打印出这个矩阵的转置? - arnavlohe15

16

一句话描述:

print('\n'.join(' '.join(map(str,sl)) for sl in l))

解释:
你可以使用join函数将list转换为str

l = ['1','2','3']
' '.join(l) # will give you a next string: '1 2 3'
'.'.join(l) # and it will give you '1.2.3'

因此,如果您想要换行符号,应该使用新的换行符号。
但是join只接受字符串列表。为将物品列表转换为字符串列表,可以对列表中的每个项目应用str函数:

l = [1,2,3]
' '.join(map(str, l)) # will return string '1 2 3'

我们将此结构应用于列表l中的每个子列表sl


3
您可以这样做:
>>> lst = [[1, 3, 4], [2, 5, 7]]
>>> for sublst in lst:
...     for item in sublst:
...             print item,        # note the ending ','
...     print                      # print a newline
... 
1 3 4
2 5 7

1
def print_list(s):
    for i in range(len(s)):
        if isinstance(s[i],list):
            k=s[i]
            print_list(k)
        else:
            print(s[i])
            
s=[[1,2,[3,4,[5,6]],7,8]]
print_list(s)

你可以在列表中嵌套列表,甚至是多层嵌套,但最终输出的结果与你期望的一样。
输出:
1
2
3
4
5
6
7
8

请再次阅读问题,因为这个答案并没有解决问题的关键。 - DuDa

1
lst = [[1, 3, 4], [2, 5, 7]]
 
def f(lst ):
    yield from lst


for x in f(lst):
    print(*x) 

使用 "yield from"...
生成输出
1 3 4
2 5 7

[Program finished] 

1

有一个更简单的一行代码:

a = [[1, 3, 4], [2, 5, 7]] # your data
[print(*x) for x in a][0] # one-line print

结果将会按照你想要的显示:

1 3 4
2 5 7

确保在列表推导式的结尾添加[0],否则最后一行将是一个由None值组成的列表,长度等于您的列表长度。


1

除了将列表排列在子列表中,还有一种替代方法可以显示列表:

tick_tack_display = ['1', '2', '3', '4', '5', '6', '7', '8', '9']

loop_start = 0
count = 0
while loop_start < len(tick_tack_display):
     print(tick_tack_display[loop_start], end = '')
     count +=1
     if count - 3 == 0:
       print("\n")
       count = 0
     loop_start += 1

输出:
123
456
789

1
我相信这很简单:

a = [[1, 3, 4], [2, 5, 7]]   # defines the list
    
for i in range(len(a)):      # runs for every "sub-list" in a
    for j in a[i]:           # gives j the value of each item in a[i]
        print(j, end=" ")    # prints j without going to a new line
    print()                  # creates a new line after each list-in-list prints

输出

1 3 4 
2 5 7 

1
a = [[1, 3, 4], [2, 5, 7]]
for i in a:
    for j in i:
        print(j, end = ' ')
    print('',sep='\n')

输出:

1 3 4
2 5 7

3
请在您的回答中添加一些描述,并解释它的工作原理以及如何解决问题。 - Amit Verma
你最后的打印输出没有任何意义,很令人困惑。print('',sep='\n') == print()... - Tomerikoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接