Python|将重复项合并到列表列表
有时,我们需要执行常规任务,将一些相似的元素分组到一个单独的列表中,从而形成一个列表列表。这也有助于计数并获得元素的排序顺序。让我们讨论一些可以做到这一点的方法。
方法 #1:使用collections.Counter()
这个特定的函数可以证明对于执行这个特定的任务非常有用,因为它计算列表中元素的频率,然后我们可以使用列表推导对它们进行配对。
# Python3 code to demonstrate
# grouping like elements as list
# using collections.Counter()
import collections
# initializing list
test_list = [1, 3, 4, 2, 1, 3, 4, 2, 3, 4, 1]
# printing original list
print("The original list : " + str(test_list))
# using collections.Counter()
# grouping like elements as list
temp = collections.Counter(test_list)
res = [[i] * j for i, j in temp.items()]
# print result
print("The elements after grouping are : " + str(res))
输出 :
The original list : [1, 3, 4, 2, 1, 3, 4, 2, 3, 4, 1]
The elements after grouping are : [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4]]
方法#2:使用itertools.groupby()
这个问题可以通过Python通过 groupby 函数提供的传统 groupby 功能轻松解决,该功能按名称对类似元素进行分组。
# Python3 code to demonstrate
# grouping like elements as list
# using itertools.groupby()
import itertools
# initializing list
test_list = [1, 3, 4, 2, 1, 3, 4, 2, 3, 4, 1]
# printing original list
print("The original list : " + str(test_list))
# using itertools.groupby()
# grouping like elements as list
res = [list(i) for j, i in itertools.groupby(sorted(test_list))]
# print result
print("The elements after grouping are : " + str(res))
输出 :
The original list : [1, 3, 4, 2, 1, 3, 4, 2, 3, 4, 1]
The elements after grouping are : [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4]]