我正在迭代几个列表,我有这个打印输出:
John, 17, 1.79
John, 19, 1.83
John, 21, 1.85
Tom, 16, 1.77
Tom, 20, 1.79
Tom, 21, 1.79
只是为了澄清,它是:姓名,年龄和身高。它将所有内容打印在一个新行上。
我想要实现的效果是:
John, 17, 1.79, 19, 1.83, 21, 1.85
Tom, 16, 1.77, 20, 1.79, 21, 1.79
一般来说代码非常复杂(我迷失了一点点)这就是为什么我不再详细说明我如何迭代我的列表等等。我希望这对你们看到大局是足够的也许想出一个有效的解决方案。
我认为一种可能性就是为每个名字创建一个数组,但是我不太渴望这个修复,因为我有很多名字,我猜它不会太高效。
再次抱歉,我提供了这些小细节。
答案 0 :(得分:3)
考虑到您的列表列表,您可以使用itertools.groupby
和一些string formatting。
请注意,如果名称未组合在一起,则需要先对列表进行排序:
In [98]: from itertools import groupby
In [99]: lis=[['John', 17, 1.79],
['John', 19, 1.83],
['John', 21, 1.85],
['Tom', 16, 1.77],
['Tom', 20, 1.79],
['Tom', 21, 1.79]]
>>> for k,v in groupby(lis,key=lambda x:x[0]):
strs=", ".join(", ".join(map(str,x[1:] ) ) for x in v)
print "{0}, {1}".format(k,strs)
...
John, 17, 1.79, 19, 1.83, 21, 1.85
Tom, 16, 1.77, 20, 1.79, 21, 1.79
答案 1 :(得分:0)
以下是我可以从您的问题中猜出的:
name_list = ['John', 'Tom']
for element in your_list:
for name in name_list:
if element == name:
print("\n%s" % element)
else:
print(element, end=' ')