Python – 将相似的元素分组到矩阵中
有时,在使用Python Matrix 时,我们可能会遇到一个问题,即我们需要对所有相同的元素进行分组。这类问题可以在数据域中应用。让我们讨论可以执行此任务的某些方式。
Input : test_list = [1, 3, 4, 4, 2, 3]
Output : [[1], [2], [3, 3], [4, 4]]
Input : test_list = [1, 3, 4, 2]
Output : [[1], [2], [3], [4]]
方法 #1:使用列表理解 + groupby()
上述功能的组合为这个问题提供了可能的解决方案。在此,我们使用 groupby() 执行分组任务,列表理解有助于迭代。
# Python3 code to demonstrate working of
# Group similar elements into Matrix
# Using list comprehension + groupby()
from itertools import groupby
# initializing list
test_list = [1, 3, 5, 1, 3, 2, 5, 4, 2]
# printing original list
print("The original list : " + str(test_list))
# Group similar elements into Matrix
# Using list comprehension + groupby()
res = [list(val) for key, val in groupby(sorted(test_list))]
# printing result
print("Matrix after grouping : " + str(res))
输出 :
The original list : [1, 3, 5, 1, 3, 2, 5, 4, 2]
Matrix after grouping : [[1, 1], [2, 2], [3, 3], [4], [5, 5]]
方法 #2:使用列表理解 + Counter()
这是解决这个问题的另一种方法。在此,我们使用 Counter() 获取值及其频率,然后使用列表推导将每个元素与频率相乘以获得重复项
# Python3 code to demonstrate working of
# Group similar elements into Matrix
# Using list comprehension + Counter()
from collections import Counter
# initializing list
test_list = [1, 3, 5, 1, 3, 2, 5, 4, 2]
# printing original list
print("The original list : " + str(test_list))
# Group similar elements into Matrix
# Using list comprehension + Counter()
temp = Counter(test_list)
res = [[key] * val for key, val in temp.items()]
# printing result
print("Matrix after grouping : " + str(res))
输出 :
The original list : [1, 3, 5, 1, 3, 2, 5, 4, 2]
Matrix after grouping : [[1, 1], [2, 2], [3, 3], [4], [5, 5]]