将相同元素组合到列表中

时间:2018-03-17 12:18:57

标签: python list

我一直试图转换我的列表

alist = [[1,[1,2]],[2,[3,4,5]],[3,[1,2]],[4,[3,4,5]],[5,[5,6,7]],[6,[1,2]]]
进入这个。由于这两个子列表中的第二项是相同的。

[[[1,3,6],[1,2]],[[2,4],[3,4,5]]]

这是我的代码

alist = [[1,[1,2]],[2,[3,4,5]],[3,[1,2]],[4,[3,4,5]],[5,[5,6,7]],[6,[1,2]]]
lst=[]
for i in range(len(alist)):
    inner = []
    inner1=[]
    for j in range(i+1,len(alist)):
        if i+1 < len(alist):
            if alist[i][1] == alist[j][1]:
                inner1.append(alist[i][0])
                inner1.append(alist[j][0])
                inner.append(inner1)
                inner.append(alist[i][1])
                lst.append(inner)


print(lst)

但它改为

[[[1, 3, 1, 6], [1, 2], [1, 3, 1, 6], [1, 2]], [[1, 3, 1, 6], [1, 2], [1, 3, 1, 6], [1, 2]], [[2, 4], [3, 4, 5]], [[3, 6], [1, 2]]]

当只有2个相同的元素相同但有3个元素不起作用时,它才有用。 实施例

[2,4],[3,4,5] #2 of the same elements from alist works
[1,3,1,6],[1,2] #3 of the same elements from alist doesn't work

有人可以提供解决方案吗?

1 个答案:

答案 0 :(得分:1)

你可以使用一个dict(一个Ordered,因为你必须保持顺序)将“head”分组为“tails”:

alist = [[1,[1,2]],[2,[3,4,5]],[3,[1,2]],[4,[3,4,5]],[5,[5,6,7]],[6,[1,2]]]

from collections import OrderedDict

c = OrderedDict()

for head, tail in alist:
    c.setdefault(tuple(tail), []).append(head)

res = [[heads, list(tail)] for tail, heads in c.items()]
print res

打印

[[[1, 3, 6], [1, 2]], [[2, 4], [3, 4, 5]], [[5], [5, 6, 7]]]

如果您想省略5(一个包含“head”的组),请在res=行添加条件:

res = [[heads, list(tail)] for tail, heads in c.items() if len(heads) > 1]