如何统计数组内嵌套列表中各成员对共同出现的列表次数
统计列表元素对共同出现次数的解决方案
核心思路
遍历所有子列表,对每个子列表的元素生成两两不重复的无序组合,用计数器累加每个组合的出现次数,最终得到的计数就是对应元素对共同出现的列表数量。
实现代码
from itertools import combinations from collections import Counter # 示例输入数据 data = [['a', 'b', 'c'], ['a', 'b'], ['c']] pair_counter = Counter() for sub_lst in data: # 先对子列表去重,避免同一列表内重复元素导致统计异常,无重复数据可省略该步 unique_items = list(set(sub_lst)) # 生成所有两两组合,sorted保证a-b和b-a视为同一对 for pair in combinations(sorted(unique_items), 2): pair_counter[pair] += 1 # 格式化输出结果 print(f"{'member_one_is':<15} {'member_two_is':<15} COUNT") for (member1, member2), count in pair_counter.items(): print(f"{member1:<15} {member2:<15} {count}")
运行结果
member_one_is member_two_is COUNT a b 2 a c 1 b c 1
方案优势
- 计算效率高:仅需要遍历所有子列表一次,单个子列表内的组合生成无冗余计算,适合绝大多数业务场景
- 鲁棒性强:内置去重逻辑,可兼容子列表存在重复元素的场景
- 结果准确:通过sorted+combinations生成无序对,不会重复统计反向的相同元素对
内容的提问来源于stack exchange,提问作者Mayak
相关产品推荐
相关产品推荐

