如何检测二维列表中的重复子列表并统计其重复次数
二维列表子列表重复检测与次数统计实现方案
核心前提:Python中列表属于可变不可哈希类型,无法直接作为字典键或传入Counter统计,需要先转为不可变的元组类型处理。
方法1:全量统计所有子列表的重复次数(推荐)
使用Python标准库的collections.Counter实现,效率高代码简洁:
from collections import Counter # 示例二维列表 grid = [[1,2,3], [4,5,6], [1,2,3], [7,8,9], [4,5,6], [1,2,3]] # 将每个子列表转为元组后统计次数 row_counts = Counter(tuple(row) for row in grid) # 输出所有重复的子列表及次数 for row_tuple, count in row_counts.items(): if count > 1: print(f"子列表{list(row_tuple)} 重复次数:{count}") # 获取指定子列表的重复次数 target_row = [1,2,3] target_count = row_counts.get(tuple(target_row), 0) print(f"指定子列表的重复次数为:{target_count}")
方法2:手动实现统计逻辑(无需导入库)
如果不想依赖标准库,可以用普通字典手动遍历统计:
grid = [[1,2,3], [4,5,6], [1,2,3], [7,8,9], [4,5,6], [1,2,3]] row_counts = {} for row in grid: row_tuple = tuple(row) row_counts[row_tuple] = row_counts.get(row_tuple, 0) + 1 # 后续查询逻辑和方法1一致
方法3:仅统计单个指定子列表的重复次数
如果不需要统计所有子列表,仅需要查询某一个子列表的出现次数,用生成器表达式遍历即可,性能更高:
target_row = [1,2,3] grid = [[1,2,3], [4,5,6], [1,2,3], [7,8,9]] count = sum(1 for row in grid if row == target_row) print(f"指定子列表重复次数为:{count}")
注意:如果你的子列表中还嵌套了可变类型(比如子列表里还有列表),需要先递归转为可哈希的嵌套元组再统计
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

