-2

我正在遍历几个列表,我有这个打印输出:

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

一般来说,代码非常复杂(我有点迷失了),这就是为什么我没有提供更多细节我如何迭代我的列表等。我希望这足以让你们看到大局,也许会来提出一个可行的解决方案。

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

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

4

2 回答 2

3

考虑到您已经列出了可以使用的列表itertools.groupby和一些字符串格式

请注意,如果名称没有组合在一起,那么您需要先对列表进行排序:

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
于 2013-05-01T14:18:35.460 回答
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=' ')
于 2013-05-01T14:25:17.830 回答