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

Python:不使用itertools生成两个数组的所有组合(代码问题排查)

问题原因

你代码里的核心问题是列表的赋值是引用传递:当你写e = d时,并没有创建一个新的列表,只是让变量e和d指向同一个列表对象。所以每次循环执行e.append(b[z]),其实都是在修改同一个d列表,最后f里的所有元素都是这个d的引用,而且d被两次append元素,就变成了带两个b中元素的长列表,导致输出重复且不符合预期。

修复方案

方案1:修改现有代码,复制列表副本

只需要把e = d改成创建d的副本,比如用d.copy()或者切片d[:],这样每次循环都生成一个新的列表,再添加b中的元素:

b = [11, 14]
c = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
f = []

for x in range(0, len(c)):
    d = []
    for y in range(0, len(c[0])):
        d.append(c[x][y])        
    for z in range(0, len(b)):
        e = d.copy()  # 或者 e = d[:],创建新列表副本
        e.append(b[z])
        f.append(e)
print(f)

方案2:更Pythonic的写法(简化循环)

不用手动遍历索引,直接遍历列表中的元素,代码更简洁易读:

b = [11, 14]
c = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
f = []

for sublist in c:
    for num in b:
        # 直接将子列表和[num]拼接,生成新列表
        f.append(sublist + [num])
print(f)

运行这段代码就能得到你想要的结果:[[1,2,3,11], [1,2,3,14], [2,3,4,11], [2,3,4,14], [3,4,5,11], [3,4,5,14], [4,5,6,11], [4,5,6,14]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:15:32