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

Python:对比两个含大量子列表的列表并统计y/z值数量

按x分组统计两列表y/z不同值数量并导出Excel的实现方法

针对你有两个含大量子列表(约28000条)的需求,下面提供两种Python实现方案,兼顾效率和易用性:

方案一:用Pandas实现(推荐,适合大数据量+快速导出Excel)

Pandas对分组统计和Excel导出支持非常友好,处理28000条数据毫无压力。

完整代码

import pandas as pd

# 示例数据
list1 = [[1,0,0],[1,0,1],[1,1,0],[1,2,0],[2,0,1],[2,1,1]]
list2 = [[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,2,0],[1,2,1],[2,0,1],[2,0,2],[2,1,1],[2,1,2],[3,0,1]]

# 1. 将列表转为DataFrame
df1 = pd.DataFrame(list1, columns=['x', 'y', 'z'])
df2 = pd.DataFrame(list2, columns=['x', 'y', 'z'])

# 2. 按x分组统计y/z的不同值数量
stat1 = df1.groupby('x').agg(
    y_unique_list1=('y', 'nunique'),
    z_unique_list1=('z', 'nunique')
).reset_index()

stat2 = df2.groupby('x').agg(
    y_unique_list2=('y', 'nunique'),
    z_unique_list2=('z', 'nunique')
).reset_index()

# 3. 合并两个统计结果(保留所有x值)
final_stat = pd.merge(stat1, stat2, on='x', how='outer').fillna(0)

# 4. 导出到Excel
final_stat.to_excel('统计结果.xlsx', index=False)

# 打印查看结果
print(final_stat)

代码说明

  • groupby('x'):按x值分组
  • agg(...):指定统计规则,nunique会自动计算列中不同值的数量
  • merge(..., how='outer'):保留两个列表中所有的x值,某列表没有的x对应统计值填充0
  • fillna(0):把缺失值(比如list1没有x=3)补为0,符合统计逻辑

示例输出结果

运行后生成的Excel表格内容如下(对应示例数据):

xy_unique_list1z_unique_list1y_unique_list2z_unique_list2
13233
22123
30011

完全匹配你描述的统计逻辑(比如list1中x=1时y不同值数量为3,z为2)。

方案二:用标准库实现(无需额外安装依赖)

如果不想安装Pandas,可以用collections.defaultdict手动统计,再用openpyxl导出Excel(需要安装openpyxl:pip install openpyxl)。

完整代码

from collections import defaultdict
from openpyxl import Workbook

def get_stats(lst):
    stats = defaultdict(lambda: {'y': set(), 'z': set()})
    for x, y, z in lst:
        stats[x]['y'].add(y)
        stats[x]['z'].add(z)
    # 转换为数量统计
    result = {}
    for x, vals in stats.items():
        result[x] = {
            'y_unique': len(vals['y']),
            'z_unique': len(vals['z'])
        }
    return result

# 示例数据
list1 = [[1,0,0],[1,0,1],[1,1,0],[1,2,0],[2,0,1],[2,1,1]]
list2 = [[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,2,0],[1,2,1],[2,0,1],[2,0,2],[2,1,1],[2,1,2],[3,0,1]]

# 获取两个列表的统计结果
stat1 = get_stats(list1)
stat2 = get_stats(list2)

# 收集所有x值
all_x = set(stat1.keys()).union(set(stat2.keys()))

# 准备Excel数据
wb = Workbook()
ws = wb.active
ws.append(['x', 'y_unique_list1', 'z_unique_list1', 'y_unique_list2', 'z_unique_list2'])

for x in sorted(all_x):
    row = [
        x,
        stat1.get(x, {'y_unique': 0})['y_unique'],
        stat1.get(x, {'z_unique': 0})['z_unique'],
        stat2.get(x, {'y_unique': 0})['y_unique'],
        stat2.get(x, {'z_unique': 0})['z_unique']
    ]
    ws.append(row)

# 保存Excel
wb.save('统计结果_标准库版.xlsx')

代码说明

  • 用defaultdict创建嵌套结构,每个x对应y和z的集合(自动去重)
  • 遍历子列表,把y和z加入对应x的集合中
  • 最后通过len()获取集合大小,即不同值的数量
  • 用openpyxl手动构建Excel表格并保存

内容的提问来源于stack exchange,提问作者Suman KK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:25:18