我有一个Python列表:
A = [1 , 2 , 3 , 2 , 1 , 4 , 1]
我想将相似的元素合并到一个新列表中,并将所有单独的列表放到另一个列表中。
例如,上述输入的输出应为:
[[1 , 1 ,1] , [2 ,2] , [3] , [4]]
顺序无关紧要。
答案 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)