Python3如何交替提取两个元组元素存入空列表得到指定输出
Python等长元组交替拼接优化方案
现有代码问题说明
你提供的逐一下标append的代码存在笔误,漏写了list5.append(tuple2[2]),运行后输出结果会缺失元素28,和预期结果不符。且该写法通用性极差,只要元组长度发生变化就需要逐行修改代码。
优化实现方案
下面给出几种不同场景的优化写法,均支持任意长度的等长元组交替拼接,无需手动逐个处理下标:
方案1:列表推导式+zip(最简洁通用)
利用zip将两个元组的对应位置元素配对,再通过列表推导式展开配对元素即可,代码量最少,可读性强:
tuple1 = (3,5,16,35,75) tuple2 = (1,19,28,44,64) list5 = [elem for pair in zip(tuple1, tuple2) for elem in pair] print(list5)
方案2:循环遍历下标(新手易理解)
如果刚接触Python不熟悉列表推导式,可以用循环遍历下标实现,逻辑直白:
tuple1 = (3,5,16,35,75) tuple2 = (1,19,28,44,64) list5 = [] # 两个元组长度相同,遍历下标范围取其中一个的长度即可 for i in range(len(tuple1)): list5.append(tuple1[i]) list5.append(tuple2[i]) print(list5)
方案3:itertools.chain(长序列性能最优)
如果需要处理长度很大的元组,用itertools.chain的性能最高,避免额外的中间内存开销:
from itertools import chain tuple1 = (3,5,16,35,75) tuple2 = (1,19,28,44,64) list5 = list(chain.from_iterable(zip(tuple1, tuple2))) print(list5)
注意事项
以上方案默认两个元组长度一致,如果实际使用时元组长度不同,zip会自动截断到较短元组的长度;如果需要保留所有元素,可以改用itertools.zip_longest处理。
内容的提问来源于stack exchange,提问作者Molly
相关产品推荐
相关产品推荐

