如何对可变长度列表的同索引元素进行对应运算并完成条件判断?
修正同索引元素运算的锁匙匹配函数
原代码的核心问题
- 嵌套
for循环会遍历两个列表的所有元素组合,而非同索引位置的元素配对,完全违背需求逻辑。 - 只要任意一对跨索引元素的运算结果超过阈值就返回
False,和“逐一检查同索引元素”的要求不符。
修正方案
基础版(要求两个列表长度一致)
使用zip()函数实现同索引元素的配对遍历,同时增加长度一致性检查:
def lock_and_key(key_cuts, lock_pinning, minimum): # 若两个列表长度不一致,直接返回False(可根据需求调整此逻辑) if len(key_cuts) != len(lock_pinning): return False # 遍历同索引元素对 for v1, v2 in zip(key_cuts, lock_pinning): current_result = abs(v1 + v2 - 6) if current_result > minimum: return False # 所有元素对均满足条件时返回True return True # 测试示例 if lock_and_key([2.1, 3.5, 2.7], [4.1, 2.5, 3.2], 0.25): print('Unlocked.') else: print('Still locked.')
进阶版(支持长度不一致的列表)
如果需要处理两个列表长度不同的场景,可使用itertools.zip_longest,为短列表的空缺部分指定填充值(示例中用0,可根据实际需求修改):
from itertools import zip_longest def lock_and_key(key_cuts, lock_pinning, minimum): # 遍历所有索引,短列表空缺部分用0填充 for v1, v2 in zip_longest(key_cuts, lock_pinning, fillvalue=0): current_result = abs(v1 + v2 - 6) if current_result > minimum: return False return True
关键说明
zip()会自动将两个列表同索引的元素打包成元组,遍历过程中严格按位置配对,完美解决“列表长度不固定”的遍历问题。- 若业务要求两个列表长度必须一致,保留长度检查即可;若允许长度不同,使用
zip_longest并配置合适的填充值。
内容的提问来源于stack exchange,提问作者Tanner Fife
相关产品推荐
相关产品推荐

