You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现二维列表的交叉连接加法操作?

实现二维列表的交叉连接元素级加法

首先,我们来拆解你的需求:本质是要把list1里的每一个子列表,和list2里的每一个子列表做笛卡尔积式的配对,然后对每一对子列表执行对应位置的元素相加,最后把所有结果汇总到sum_list中。

基础实现:笛卡尔积配对相加

如果你的核心需求是list1子列表 × list2子列表的所有配对相加,用嵌套循环结合列表推导式就能直观实现:

list1 = ([5, 2, 8], [1, 2, 3])
list2 = ([11, 6, 3], [3, 2, 1])
sum_list = []

# 遍历list1的每个子列表
for sub1 in list1:
    # 遍历list2的每个子列表,和当前list1子列表配对
    for sub2 in list2:
        # 对应位置元素相加,zip用来把两个子列表的元素一一配对
        added_sub = [a + b for a, b in zip(sub1, sub2)]
        sum_list.append(added_sub)

print(sum_list)

执行这段代码后,输出结果为:

[[16, 8, 11], [8, 4, 9], [12, 8, 6], [4, 4, 4]]

扩展到双向配对(包含list2×list1的情况)

如果需要把list2子列表和list1子列表的反向配对也加进来(也就是把list2作为左列表,list1作为右列表再做一次笛卡尔积),只需要再加一轮嵌套循环:

list1 = ([5, 2, 8], [1, 2, 3])
list2 = ([11, 6, 3], [3, 2, 1])
sum_list = []

# 先处理list1 × list2的配对
for sub1 in list1:
    for sub2 in list2:
        sum_list.append([a + b for a, b in zip(sub1, sub2)])

# 再处理list2 × list1的配对
for sub2 in list2:
    for sub1 in list1:
        sum_list.append([a + b for a, b in zip(sub2, sub1)])

print(sum_list)

这段代码会输出8个结果,涵盖所有单向和反向的配对组合。

匹配你给出的12个结果:全列表子列表两两配对

观察你期望的输出有12个结果,推测你可能需要把list1list2的所有子列表合并成一个总列表,然后对总列表中所有不同的有序子列表对(排除子列表自身和自身配对的情况)执行相加。实现代码如下:

list1 = ([5, 2, 8], [1, 2, 3])
list2 = ([11, 6, 3], [3, 2, 1])
# 合并两个列表的所有子列表
all_subs = list(list1) + list(list2)
sum_list = []

# 遍历所有有序配对,跳过自身与自身的组合
for i in range(len(all_subs)):
    for j in range(len(all_subs)):
        if i != j:
            sum_list.append([a + b for a, b in zip(all_subs[i], all_subs[j])])

print(sum_list)

执行后会得到12个结果,和你给出的输出数量完全一致。如果需要包含子列表自身与自身的配对,只需要去掉if i != j:的判断即可。

小技巧:用itertools简化笛卡尔积写法

如果想让代码更简洁,可以用itertools.product来生成笛卡尔积,效果和嵌套循环完全一致:

from itertools import product

list1 = ([5,2,8], [1,2,3])
list2 = ([11,6,3], [3,2,1])
sum_list = [[a+b for a,b in zip(s1,s2)] for s1,s2 in product(list1, list2)]

注意事项

  • 确保所有子列表的长度一致,否则zip会以最短的子列表长度为准配对,可能导致结果缺失元素。
  • 如果需要对结果做排序、去重等后续处理,可以在汇总后添加对应逻辑。

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

火山引擎 最新活动