组合两个没有相同条目数的列表

时间:2018-01-20 01:15:44

标签: python

我有两个要结合的列表。我尝试使用zip()但是header_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]

结果应该是以下格式的元组:

('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)
...

3 个答案:

答案 0 :(得分:6)

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

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 290, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/lib/python3/dist-packages/pip/req.py", line 1266, in prepare_files
    req_to_install.extras):
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2401, in requires
    dm = self._dep_map
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2597, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2621, in _compute_dependencies
    parsed = next(parse_requirements(distvers))
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2721, in parse_requirements
    "version spec")
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2697, in scan_list
    raise ValueError(msg, line, "at", line[p:])
ValueError: ("Expected ',' or end-of-list in", 'pytest ==3.2.*', 'at', '*')
一旦较短的可迭代结束,

from itertools import cycle print(zip(cycle(header_list), data_list)) 将停止。 zip返回一个永不结束的迭代(不断重复cycle),因此header_list会更短(当data_list结束时它将停止压缩)。

答案 1 :(得分:1)

假设您希望简短的列表简单换行,您可以遍历较长列表的索引并使用较短列表的长度来修改当前索引:

gomobile init

或者,更加Pythonic:

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

答案 2 :(得分:0)

这样的事情怎么样?

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