如何对具有相同名称的列表元素进行分组?

时间:2019-04-12 14:26:43

标签: python python-3.x

我正在尝试将具有相同名称的元素重新组合,我尝试了以下代码:

l=[0,1,1,1,3,3]
lo=[[2,1,5],[2,8,9],[5,9,7],[4,6,9],[7,9,5],[2,5,6]]
ss=[]
for i in range(0,6):
    for j in range(i+1,6):
        if l[i]==l[j]:
            b=[lo[i],lo[j]]
            print(b)
            ss.append(b)
            print('////',ss)
           break

        else:
            b=[lo[i]]
            print('****',b)
            ss.append(b)
            print('/*/*/',ss)
            break

print('ss:',ss)

我希望得到结果

ss: [[2,1,5],[[2,8,9],[5,9,7],[4,6,9]],[[7,9,5],[2,5,6]]] 

但是它给出了:

ss: [[[2, 1, 5]], [[2, 8, 9], [5, 9, 7]], [[5, 9, 7], [4, 6, 9]], [[4, 6, 9]], [[7, 9, 5], [2, 5, 6]]]

1 个答案:

答案 0 :(得分:2)

您可以zip将两个列表分成一个元组序列,以便可以使用itertools.groupby根据l中的值对元组进行分组:

from itertools import groupby
[[s for _, s in g] for _, g in groupby(zip(l, lo), lambda t: t[0])]

这将返回:

[[[2, 1, 5]], [[2, 8, 9], [5, 9, 7], [4, 6, 9]], [[7, 9, 5], [2, 5, 6]]]