如何合并长度不同的列表?解决zip()函数无法复用短列表的问题
解决header_list长度不足时与data_list的配对问题
嘿,这个场景我太熟悉了!你用zip()失效是因为它只会以两个序列中较短的那个长度来生成配对,而你的data_list明显是多组重复的周期数据,刚好对应header_list的多次循环。下面给你两种靠谱的解决方案:
方案1:手动重复header_list(适用于数据长度是整数倍的情况)
既然你的data_list刚好是header_list长度的3倍(33个元素 vs 11个元素),我们可以直接把header_list重复对应次数,再和data_list配对:
header_list = ['1 mo', '3 mo', '6 mo', '1 yr', '2 yr', '3 yr', '5 yr', '7 yr', '10 yr', '20 yr', '30 yr'] data_list = [1.29, 1.44, 1.61, 1.83, 1.92, 2.01, 2.25, 2.38, 2.46, 2.64, 2.81, 1.29, 1.41, 1.59, 1.81, 1.94, 2.02, 2.25, 2.37, 2.44, 2.62, 2.78, 1.28, 1.41, 1.6, 1.82, 1.96, 2.05, 2.27, 2.38, 2.46, 2.62, 2.79] # 计算需要重复的次数 repeat_count = len(data_list) // len(header_list) # 重复header_list后与data_list配对 paired_result = list(zip(header_list * repeat_count, data_list)) # 输出验证 for item in paired_result: print(item)
运行后就能得到你想要的连续元组配对,每一组数据都会对应完整的header序列。
方案2:用itertools.cycle循环header(更灵活,适配任意数据长度)
如果以后你的data_list长度不是header_list的整数倍,推荐用itertools.cycle来循环迭代header序列,它会无限重复header_list,直到data_list耗尽:
from itertools import cycle header_list = ['1 mo', '3 mo', '6 mo', '1 yr', '2 yr', '3 yr', '5 yr', '7 yr', '10 yr', '20 yr', '30 yr'] data_list = [1.29, 1.44, 1.61, 1.83, 1.92, 2.01, 2.25, 2.38, 2.46, 2.64, 2.81, 1.29, 1.41, 1.59, 1.81, 1.94, 2.02, 2.25, 2.37, 2.44, 2.62, 2.78, 1.28, 1.41, 1.6, 1.82, 1.96, 2.05, 2.27, 2.38, 2.46, 2.62, 2.79] # 循环header_list与data_list配对 paired_result = list(zip(cycle(header_list), data_list)) # 输出验证 for item in paired_result: print(item)
这个方法不需要计算重复次数,不管data_list是33个还是34个元素,都能自动循环header来配对,实用性更强。
内容的提问来源于stack exchange,提问作者Hannan
相关产品推荐
相关产品推荐

