迭代列表时出现打印问题

时间:2013-05-01 14:10:28

标签: python loops printing python-2.7

我正在迭代几个列表,我有这个打印输出:

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

一般来说代码非常复杂(我迷失了一点点)这就是为什么我不再详细说明我如何迭代我的列表等等。我希望这对你们看到大局是足够的也许想出一个有效的解决方案。

我认为一种可能性就是为每个名字创建一个数组,但是我不太渴望这个修复,因为我有很多名字,我猜它不会太高效。

再次抱歉,我提供了这些小细节。

2 个答案:

答案 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=' ')