[英]Printing items from a list in Python
我正在尝试用Python编写一个函数,在其中给了一个列表l = [[2,3],[5,6],[4,8]]
,其中包含其他列表。 我应该将一行中的每个列表中的第一项打印在中间,中间有三个空格,而另一行中的每个列表中的第二项打印在另一行中,中间也有三个空格。 我编写了以下代码-但是它似乎可以将所有内容打印在一行上,而且我不确定自己做错了什么。
l = [[2,3],[5,6],[4,8]]
for item in l:
print(item[0], end = ' ')
for obj in l:
print(obj[1], end = ' ')
这样可以:
for column in range(2):
print(" ".join([str(row[column]) for row in l]))
>>> l = [[2,3],[5,6],[4,8]]
>>> for column in range(2):
... print(" ".join([str(row[column]) for row in l]))
...
2 5 4
3 6 8
您已经在两个循环外添加一个换行符,您就可以了:
l = [[2,3],[5,6],[4,8]]
for item in l:
print(item[0], end = ' ')
print('\n') #take note this needs to be outside both loops
for obj in l:
print(obj[1], end = ' ')
但是,如果您只是希望它立即出现在下一行,
l = [[2,3],[5,6],[4,8]]
for item in l:
print(item[0], end = ' ')
print() #take note this needs to be outside both loops
for obj in l:
print(obj[1], end = ' ')
由于它是整数,因此要与字符串连接,请使用map !
>>> " ".join(str(item[0]) for item in l)
'2 5 4'
>>> " ".join(str(item[1]) for item in l)
'3 6 8'
或使用zip !
zip-简单地说,它将子列表中相同索引的所有元素分组到一个列表中。
此函数返回一个元组列表,其中第i个元组包含每个参数序列或可迭代对象中的第i个元素。 返回列表的长度被截断为最短参数序列的长度。 当有多个长度相同的参数时,zip()类似于map(),其初始参数为None。 使用单个序列参数,它将返回一个1元组的列表。 没有参数,它将返回一个空列表。
保证了可迭代对象的从左到右的评估顺序。 这使得使用zip(* [iter(s)] * n)将数据系列聚类为n个长度的组成为可能。
>>> l
[[2, 3], [5, 6], [4, 8]]
>>> zip(*l)
[(2, 5, 4), (3, 6, 8)]
>>> for each in zip(*l):
... " ".join(map(str,each))
...
'2 5 4'
'3 6 8'
您可以尝试以下方法:
l = [[2,3],[5,6],[4,8]]
new_l = ["{} {} {}".format(*[b[i] for b in l]) for i in range(len(l[0]))]
for i in new_l:
print(i)
输出:
2 5 4
3 6 8
由于修改了默认的“ \\ n”作为打印的结束字符,因此需要在循环之间添加print()
。
实现此目的的另一种方法是:
>>> print(*a[0], sep = " ")
>>> print(*b[1], sep = " ")
只需在中间插入打印语句!
l=[[2,3],[4,5],[6,7]]
for item in l:
print(item[0], end = ' ')
print()
for obj in l:
print(obj[1], end = ' ')
>>> ''.join([str(l[i][0])+str(" ") if i!=len(l)-1 else str(l[i][0]) for i in range(len(l))])
'2 5 4'
>>> ''.join([str(l[i][1])+str(" ") if i!=len(l)-1 else str(l[i][1]) for i in range(len(l))])
'3 6 8'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.