You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python列表推导式提取两个列表元素的指定位置词汇

问题说明

使用Python列表推导式实现如下需求时出现结果不符合预期的问题:

  • 提取列表meeps每个元素的第一个单词
  • 提取列表peeps每个元素的第二个单词
  • 两个列表的提取结果按对应位置配对输出

初始错误实现代码如下:

meeps = ["Foghorn Leghorn", "Elmer Fudd", "Road Runner", "Bugs Bunny", "Daffy Duck", "Tasmanian Devil"]
peeps = ["John Cleese", "Michael Palin", "Terry Gilliam", "Terry Jones", "Graham Chapman","Eric Idle"]

mashemup1 = [(x.split()[0], y.split()[1]) for x in meeps for y in peeps]
print(mashemup1)

运行后得到的是两个列表所有元素两两配对的笛卡尔积结果,共36组配对,和预期的6组同位置配对结果不符。

错误原因

列表推导式中写双层for循环的逻辑等价于两层嵌套遍历:外层遍历meeps的每一个元素,内层会遍历完peeps的所有元素做配对,自然会生成全量笛卡尔积,无法实现同位置一一配对的效果。

正确实现

使用内置函数zip()对两个列表做并行遍历,每次迭代直接拿到两个列表同位置的元素对,再做单词提取即可,修正后的代码:

meeps = ["Foghorn Leghorn", "Elmer Fudd", "Road Runner", "Bugs Bunny", "Daffy Duck", "Tasmanian Devil"]
peeps = ["John Cleese", "Michael Palin", "Terry Gilliam", "Terry Jones", "Graham Chapman","Eric Idle"]

mashemup1 = [(x.split()[0], y.split()[1]) for x, y in zip(meeps, peeps)]
print(mashemup1)

运行输出为预期的同位置配对结果:

[('Foghorn', 'Cleese'), ('Elmer', 'Palin'), ('Road', 'Gilliam'), ('Bugs', 'Jones'), ('Daffy', 'Chapman'), ('Tasmanian', 'Idle')]

补充说明:如果两个列表长度不一致,zip()会默认以更短的列表长度为基准截断配对;如果需要保留长列表的所有元素,可以使用itertools.zip_longest做补位配对,当前场景两个列表长度一致,直接使用zip()即可满足需求。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:15:34