You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何统计嵌套列表中元素两两关联的共现次数

嵌套列表元素对共现次数统计实现

注意:Python中列表是可变类型,无法作为字典的键,因此实际存储元素对需要使用不可变的元组类型,和你预期的列表键语义完全一致,不影响结果使用。

核心实现逻辑

  • 逐一遍历原始嵌套列表中的每个子列表
  • 对单个子列表先做去重处理,避免同子列表内的重复元素生成无效配对、重复计数
  • 对去重后的子列表元素,生成所有不考虑顺序的两两元素组合(即两个元素只生成一个配对,不区分先后顺序)
  • 用计数结构累加每个元素对的出现次数,遍历完全部子列表后即可得到最终结果

代码实现

写法1:使用Python标准库(简洁高效)

用标准库itertools.combinations生成无序配对,collections.Counter做计数,代码最简洁:

from itertools import combinations
from collections import Counter

x = [['apple', 'banana', 'carrot'], ['apple', 'banana'], ['banana', 'carrot']]
pair_counter = Counter()

for sub_list in x:
    unique_items = set(sub_list)
    # 生成长度为2的所有无序元素组合
    for pair in combinations(unique_items, 2):
        # 排序后转元组,保证同一元素对的键完全一致
        fixed_pair = tuple(sorted(pair))
        pair_counter[fixed_pair] += 1

print(dict(pair_counter))

运行输出:
{('apple', 'banana'): 2, ('apple', 'carrot'): 1, ('banana', 'carrot'): 2}
和你预期的计数结果完全匹配。

写法2:不依赖导入库的原生实现

如果不想引入标准库模块,也可以通过双层循环手动生成配对,逻辑完全一致:

x = [['apple', 'banana', 'carrot'], ['apple', 'banana'], ['banana', 'carrot']]
pair_counter = {}

for sub_list in x:
    unique_items = list(set(sub_list))
    n = len(unique_items)
    # 双层循环生成所有i<j的无序配对,避免重复
    for i in range(n):
        for j in range(i + 1, n):
            pair = (unique_items[i], unique_items[j])
            fixed_pair = tuple(sorted(pair))
            if fixed_pair not in pair_counter:
                pair_counter[fixed_pair] = 0
            pair_counter[fixed_pair] += 1

print(pair_counter)

关键细节说明

  • 对子列表做set去重:如果子列表内存在重复元素(比如['apple', 'apple', 'banana']),去重后可以避免生成('apple', 'apple')这类无意义的配对,也不会重复统计同一个子列表内的共现关系
  • 对配对做排序处理:可以保证不管子列表内元素的书写顺序如何,同一个元素对生成的字典键完全一致,不会出现('apple', 'banana')和('banana', 'apple')被识别为两个不同键的问题

内容的提问来源于stack exchange,提问作者Sebastien Grima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:06:27