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

如何用Python实现多列表的组合运算(含拼接、加减乘操作)?

问题需求

现有三个列表:

a = ['a',2225, 0.063, 29.31]
b = ['b',5000, 0.072, 109]
c = ['c',6500, 0.051, 70]

需要生成所有非空子集组合,组合规则如下:

  • 第0列:对应列表名称拼接
  • 第1列:对应数值相加
  • 第2列:对应数值相乘
  • 第3列:对应数值相加

预期输出:

['a',2225, 0.063, 29.31]
['b',5000, 0.072, 109]
['c',6500, 0.051, 70]
['ab', 7225, 0.0045, 138.31]
['ac', 8725, 0.0032, 99.31]
['bc', 11500, 0.0036, 179]
['abc', 13725, 0.0002, 208.31]
解决方案

可以用Python的itertools.combinations生成所有非空子集,再对每个子集按规则计算对应值,代码实现如下:

import itertools

# 将列表名称与对应数值部分关联,方便后续处理
data = [('a', [2225, 0.063, 29.31]),
        ('b', [5000, 0.072, 109]),
        ('c', [6500, 0.051, 70])]

# 遍历所有非空子集的大小:从1个元素到全部3个元素
for size in range(1, len(data)+1):
    # 生成当前大小的所有组合
    for combo in itertools.combinations(data, size):
        # 拼接名称(第0列)
        name = ''.join(item[0] for item in combo)
        # 计算第1列:数值求和
        col1 = sum(item[1][0] for item in combo)
        # 计算第2列:数值相乘
        col2 = 1.0
        for item in combo:
            col2 *= item[1][1]
        # 计算第3列:数值求和
        col3 = sum(item[1][2] for item in combo)
        # 调整小数位数,匹配预期输出格式
        result = [
            name,
            col1,
            round(col2, 4),
            round(col3, 2) if isinstance(col3, float) else col3
        ]
        print(result)

代码说明

  1. 先把每个列表的名称和对应的数值段打包成元组,避免混淆名称和计算值
  2. 用itertools.combinations生成不同长度的子集组合,确保覆盖所有非空情况
  3. 按规则分别计算四个列的值:
    • 名称直接用字符串拼接
    • 第1、3列用sum函数直接求和
    • 第2列通过循环累乘得到结果
  4. 最后对小数结果做四舍五入,和预期输出的格式保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:50:26