Python嵌套列表反转代码修正:修改现有代码实现子列表元素反转
问题根源
你当前代码的核心错误是括号作用域匹配错误:
- 原写法
list(reversed(i) for i in zip(...))是把整个生成器表达式强制转成列表,但每个生成元素reversed(i)本身返回的是惰性反向迭代器对象,不是已经完成元素反转的实际列表。最终存入z的全是打印出来类似<list_reverseiterator object at 0x...>的迭代器引用,完全达不到你要的子列表元素反转效果。
最小改动实现(完全保留原有代码逻辑,不重写)
仅需要调整作用域,把每个反向迭代器转成实际列表即可,改动幅度极小:
z = [list(reversed(i)) for i in zip(['FRED', 'CORWILL'], ['WILFRED', 'CORWILL'], ['RAPHAEL', 'CORWILL'], ['ALFRED', 'CORWILL'], ['BARNEY', 'TORNBULL'], ['BETTY', 'TORNBULL'], ['BJON', 'TORNBULL'])] print(z)
改动说明
- 全程保留你原本的核心逻辑:用zip打包成对的姓名、遍历每个打包单元、用
reversed()执行元素反转,没有替换成其他实现思路 - 仅对单个
reversed(i)的返回值调用list(),把惰性迭代器转换成你需要的列表格式 - 代码运行后的输出完全匹配你的需求:
[['CORWILL', 'FRED'], ['CORWILL', 'WILFRED'], ['CORWILL', 'RAPHAEL'], ['CORWILL', 'ALFRED'], ['TORNBULL', 'BARNEY'], ['TORNBULL', 'BETTY'], ['TORNBULL', 'BJON']]
如果你想完全沿用原本的生成器表达式写法,不想换成列表推导式,只需要给每个reversed的结果多套一层list()即可,效果完全一致:
z = list(list(reversed(i)) for i in zip(['FRED', 'CORWILL'], ['WILFRED', 'CORWILL'], ['RAPHAEL', 'CORWILL'], ['ALFRED', 'CORWILL'], ['BARNEY', 'TORNBULL'], ['BETTY', 'TORNBULL'], ['BJON', 'TORNBULL']))
内容的提问来源于stack exchange,提问作者user15463263
相关产品推荐
相关产品推荐

