使用Python zip()解包三个列表时输出混乱带引号问题求解
错误原因
- 变量引用错误:你在
print的f字符串中使用了heros(外层完整的英雄列表变量),而没有使用for循环解包出来的单个英雄变量hero,这是每次输出都打印完整列表的直接原因。 - 循环变量命名冲突:for循环的解包变量
names、universes和外层的列表变量同名,会在第一次循环后覆盖原列表变量的值,属于不规范的命名习惯,也可能引发后续其他逻辑错误。
解决方法
首先修正变量命名和引用问题,就能得到按索引一一对应匹配的正确输出:
names = ['peter paker', 'clark kent', 'wade wilson', 'bruce wayne'] heros = ['spider man', 'super man', 'dead pool', 'bat man'] universes = ['marvel', 'DC', 'marvel', 'DC'] # 循环变量使用和外层列表不冲突的命名,print引用正确的解包变量 for name, hero, universe in zip(names, heros, universes): print(f'{name} is actually {hero} from {universe}')
运行上述代码会输出4组正确的对应结果:
peter paker is actually spider man from marvel clark kent is actually super man from DC wade wilson is actually dead pool from marvel bruce wayne is actually bat man from DC
如果你需要得到你给出的期望输出样式,需要添加筛选条件,仅输出你需要的条目即可。比如要筛选出蜘蛛侠和蝙蝠侠的对应条目,代码调整如下:
names = ['peter paker', 'clark kent', 'wade wilson', 'bruce wayne'] heros = ['spider man', 'super man', 'dead pool', 'bat man'] universes = ['marvel', 'DC', 'marvel', 'DC'] filter_heros = {'spider man', 'bat man'} for name, hero, universe in zip(names, heros, universes): if hero in filter_heros: print(f'{name} is actually {hero} from {universe}')
运行后输出:
peter paker is actually spider man from marvel bruce wayne is actually bat man from DC
注:你给出的期望输出中第二行
clark kent对应bat man不符合你提供的列表的索引对应关系,如果确实需要该映射,可自行调整列表元素顺序或添加自定义映射逻辑。
内容的提问来源于stack exchange,提问作者user16555888
相关产品推荐
相关产品推荐

