Python 合并两个条目数不相同的列表

Python 合并两个条目数不相同的列表,python,Python,我有以下两个列表要合并。我试图使用zip(),但由于明显的原因,header\u列表用完了 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,

我有以下两个列表要合并。我试图使用
zip()
,但由于明显的原因,header\u列表用完了

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]
结果应为以下格式的元组:

('1 mo', 1.29)
('3 mo', 1.44)
('6 mo', 1.61)
('1 yr', 1.83)
('2 yr', 1.92)
('3 yr', 2.01)
('5 yr', 2.25)
('7 yr', 2.38)
('10 yr', 2.46)
('20 yr', 2.64)
('30 yr', 2.81)
('1 mo', 1.29)
('3 mo', 1.41)
('6 mo', 1.59)
('1 yr', 1.81)
('2 yr', 1.94)
('3 yr', 2.02)
('5 yr', 2.25)
('7 yr', 2.37)
('10 yr', 2.44)
('20 yr', 2.62)
('30 yr', 2.78)
...

假设您希望较短列表简单地换行,您可以迭代较长列表的索引,并根据较短列表的长度修改当前索引:

out = [(header_list[i%len(header_list)], data_list[i]) for i in range(len(data_list))]
或者,更像蟒蛇:

out = [(header_list[i%len(header_list)], e) for i,e in enumerate(data_list)]

如果使用itertools,可以使用重复较短的一个:

from itertools import cycle
print(zip(cycle(header_list), data_list))

zip
将在较短的iterable结束后停止<代码>循环返回一个永不结束的iterable(不断重复
标题列表
),因此
数据列表
将更短(并且当
数据列表
结束时它将停止压缩)。

这样的事情怎么样

counter = 0
new_list = []
for data in data_list:
    new_list.append([header_list[counter%len(header_list)],data])
    counter+=1

我没有意识到
循环
功能,谢谢!太棒了,干得不错。Thx a lotThanks,这很好。与其迭代
范围(len(data\u list))
,我认为更为python的方法是迭代
枚举(data\u list)
。列表索引通常不太通俗。@BaileyParker谢谢,通常作为选项添加,使用计数器和
List.append
不是很通俗。在这种情况下,您最好通过理解来构建列表。如果您确实需要访问索引,
enumerate
是您的朋友。@BaileyParker
list.append
是完美的pythonic,尽管您是正确的,但这里的
enumerate
是您将使用的而不是计数器变量。不过,最好是
zip