作者:法华大道暴力喵一只 | 来源:互联网 | 2024-11-21 17:07
Python技巧:将相同元素聚合至矩阵
原文链接: https://www.geeksforgeeks.org/python-group-similar-elements-into-matrix/
在Python编程中,有时需要将列表中的重复元素聚合成子列表,形成一个矩阵结构。这一操作在数据预处理阶段尤为重要,能够帮助我们更好地理解和分析数据集。下面介绍两种实现该功能的方法。
示例1:
输入: test_list = [1, 3, 4, 4, 2, 3]
输出: [[1], [2], [3, 3], [4, 4]]
示例2:
输入: test_list = [1, 3, 4, 2]
输出: [[1], [2], [3], [4]]
方法一:利用列表推导式与groupby()
函数
此方法结合了列表推导式和itertools模块中的groupby()函数来解决问题。首先,通过sorted()函数对原始列表进行排序,确保相同的元素相邻,然后使用groupby()按值分组,最后通过列表推导式生成结果矩阵。
# Python3代码示例
# 使用列表推导式和groupby()将相同元素聚合至矩阵
from itertools import groupby
# 初始化列表
test_list = [1, 3, 5, 1, 3, 2, 5, 4, 2]
# 打印原始列表
print("原始列表 : " + str(test_list))
# 聚合相同元素至矩阵
# 使用列表推导式和groupby()
res = [list(val) for key, val in groupby(sorted(test_list))]
# 打印结果
print("聚合后的矩阵 : " + str(res))
输出:
原始列表 : [1, 3, 5, 1, 3, 2, 5, 4, 2]
聚合后的矩阵 : [[1, 1], [2, 2], [3, 3], [4], [5, 5]]
方法二:使用列表推导式与Counter()
类
另一种实现方式是使用collections模块中的Counter()类来统计每个元素出现的次数,再通过列表推导式生成相应的子列表。这种方法不仅简洁而且效率高。
# Python3代码示例
# 使用列表推导式和Counter()将相同元素聚合至矩阵
from collections import Counter
# 初始化列表
test_list = [1, 3, 5, 1, 3, 2, 5, 4, 2]
# 打印原始列表
print("原始列表 : " + str(test_list))
# 聚合相同元素至矩阵
# 使用列表推导式和Counter()
temp = Counter(test_list)
res = [[key] * val for key, val in temp.items()]
# 打印结果
print("聚合后的矩阵 : " + str(res))
输出:
原始列表 : [1, 3, 5, 1, 3, 2, 5, 4, 2]
聚合后的矩阵 : [[1, 1], [2, 2], [3, 3], [4], [5, 5]]