在一个新列表中合并列表的相似元素

时间:2019-11-17 15:00:34

标签: python python-3.x

我有一个Python列表:

A = [1 , 2 , 3 , 2 , 1 , 4 , 1]

我想将相似的元素合并到一个新列表中,并将所有单独的列表放到另一个列表中。

例如,上述输入的输出应为:

 [[1 , 1 ,1] , [2 ,2] , [3] , [4]]

顺序无关紧要。

5 个答案:

答案 0 :(得分:4)

您可以使用collections.Counter来计算值,并以列表理解的方式生成子列表:

from collections import Counter

A = [1 , 2 , 3 , 2 , 1 , 4 , 1]

out = [[item]*count for item, count in Counter(A).items()]
print(out)
# [[1, 1, 1], [2, 2], [3], [4]]

答案 1 :(得分:1)

使用itertools.groupby对元素进行分组:

from itertools import groupby

A = [1 , 2 , 3 , 2 , 1 , 4 , 1]

print([list(g) for _, g in groupby(sorted(A))])
# [[1, 1, 1], [2, 2], [3], [4]]

答案 2 :(得分:1)

您可以使用defaultdict

from collections import defaultdict

lst = [1 , 2 , 3 , 2 , 1 , 4 , 1]

dct = defaultdict(list)
for i in lst:
    dct[i].append(i)

print(list(dct.values()))
# [[1, 1, 1], [2, 2], [3], [4]]

答案 3 :(得分:0)

arrayA = [1 , 2 , 3 , 2 , 1 , 4 , 1]
setS = set(arrayA)
finalArray = []
for i in setS:
    tempArray = []
    for j in range(arrayA.count(i)):
        tempArray.append(i) 
    finalArray.append(tempArray)

print (finalArray)

答案 4 :(得分:0)

您可以排序然后推送到数组。

A.sort()
ans = [[]]
for num in A:
    if ans[-1] and ans[-1][-1] == num:
        ans[-1] += [num]
    else:
        ans += [[num]]
print(ans)