Python代码实现列表元素求和表达式,为何返回空列表[]?
问题原因及解决方案
你的代码逻辑本身是通顺的,但问题出在**zip()返回的是一次性迭代器**这个Python特性上!
为什么会返回空列表?
在Python里,zip()函数生成的不是列表,而是一个迭代器对象。迭代器有个关键特性:只能被遍历一次。如果是在交互式环境中分步骤执行代码(比如先执行table = zip(L1, L2, SUM),又顺手用list(table)查看过内容),那迭代器内部的指针会直接走到末尾,之后再调用TABLE(table)时,迭代器已经没有元素可以遍历,自然返回空列表[]。
如果是一次性完整运行代码,其实本来能得到预期结果,但交互式环境下的分步操作很容易耗尽迭代器。
两种简单修复方案
- 提前将zip对象转为列表
把table定义成列表类型,这样它就不再是只能用一次的迭代器,而是可以反复访问的容器:
table = list(zip(L1, L2, SUM))
- 在函数内部重新生成zip结果
避免依赖外部已经创建好的迭代器,直接在TABLE函数里生成需要的zip对象:
def TABLE(): return list(map(lambda triplet: str_sum(triplet), zip(L1, L2, SUM)))
修复后的完整代码示例
Tuple = (1, 2, 3) def str_sum(Tuple): return '{} + {} = {}'.format(*Tuple) L1 = [1, 2, 5] L2 = [5, 6, 8] def Sum(L1, L2): return list(map(lambda x, y: x + y, L1, L2)) SUM = Sum(L1, L2) # 修复点:将zip结果转为列表 table = list(zip(L1, L2, SUM)) def TABLE(table): return list(map(lambda triplet: str_sum(triplet), table)) print(TABLE(table)) # 输出预期结果: ['1 + 5 = 6', '2 + 6 = 8', '5 + 8 = 13']
内容的提问来源于stack exchange,提问作者Inti
相关产品推荐
相关产品推荐

