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

嵌套列表对应位置元素计数需求及Python代码修正咨询

我来帮你修正代码,先看看现有代码的核心问题:

问题分析

  1. 配对逻辑错误:你用了嵌套遍历for i in c + for j in b,这会把c里的每个子列表和b里的所有子列表配对,而不是按索引一一对应,最终会得到多余的统计结果。
  2. 元素比较逻辑错误intersect函数里的if i in l2是判断元素是否存在于另一个子列表中,而非对应位置的元素是否相等——如果子列表元素顺序不同但元素相同,这个逻辑会返回错误的统计值。

修正后的代码

先看清晰的函数式实现:

def count_matching_elements(l1, l2):
    count = 0
    # 同时遍历两个子列表的对应位置元素
    for elem1, elem2 in zip(l1, l2):
        if elem1 == elem2:
            count += 1
    return count

c = [[1,2], [2,3]]
b = [[1,2], [2,0]]
result = []
# 按索引一一配对c和b的子列表
for sub_c, sub_b in zip(c, b):
    result.append(count_matching_elements(sub_c, sub_b))

print(result)  # 输出 [2, 1]

如果想要更简洁的写法,可以用列表推导式一步完成:

c = [[1,2], [2,3]]
b = [[1,2], [2,0]]
# 利用布尔值转整数的特性,sum直接统计相等元素数量
result = [sum(elem1 == elem2 for elem1, elem2 in zip(sub_c, sub_b)) for sub_c, sub_b in zip(c, b)]
print(result)  # 输出 [2, 1]

关键改动说明

  • zip(c, b)实现索引对应配对,确保每次处理的是cb中同一位置的子列表。
  • zip(l1, l2)遍历子列表的对应元素,保证是同一位置的元素比较。
  • 移除了原函数中无用的count参数(原参数在函数内被重新赋值为0,完全没有作用)。

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

火山引擎 最新活动