
本文介绍在 python 中使用 zip() 函数高效配对两个等长列表的对应元素,并通过列表推导式完成字符串与数字(或其他类型)的逐项拼接,生成目标新列表。
在 Python 中,若需将两个列表(如 list1 = [1, 2, 3, 4] 和 list2 = ["nest", "middle", "crow", "damage"])中索引相同位置的元素一一组合(例如 "nest" + 1 → "nest1"),最简洁、安全且符合 Python 惯用法的方式是使用内置函数 zip()。
zip() 会将多个可迭代对象“拉链式”配对,生成一个由元组组成的迭代器:zip(list2, list1) 产出 ("nest", 1), ("middle", 2), ("crow", 3), ("damage", 4)。随后配合列表推导式即可完成格式化拼接:
list1 = [1, 2, 3, 4]
list2 = ["nest", "middle", "crow", "damage"]
list3 = [f"{word}{num}" for word, num in zip(list2, list1)]
print(list3)
# 输出: ['nest1', 'middle2', 'crow3', 'damage4']✅ 关键说明:
- zip() 自动截断至最短列表长度,避免索引越界(例如当两列表长度不同时,不会报错,而是以较短者为准);
- 顺序很重要:zip(list2, list1) 表示先取 list2 元素(字符串),再取 list1 元素(数字),确保拼接为 "wordnum" 而非 "numword";
- 若需支持不同数据类型(如 float、bool),f-string 会自动调用 str() 转换,无需额外处理。
⚠️ 注意事项:
- 原问题中 list2 的第三个字符串 "crow""damage" 是语法错误(Python 中相邻字符串字面量会自动拼接,实际等价于 "crowdamage"),应修正为 "crow", "damage";
- 若必须严格要求两列表等长并希望在不等长时抛出异常,可改用 itertools.zip_longest() 配合 strict=True(Python 3.10+)或手动校验长度。
总结:[f"{a}{b}" for a, b in zip(list_a, list_b)] 是实现双列表逐项拼接的标准范式——简洁、高效、可读性强,是 Python 数据处理中的基础但极其实用的技巧。










