Python,zip多个列表,其中一个列表每个需要两个项目

Ken*_*ers 7 python list

我有以下列表作为示例:

a = ['#12908069', '#12906115', '#12904949', '#12904654', '#12904288', '#12903553']    
b = ['85028,', '83646,', '77015,', '90011,', '91902,', '80203,']    
c = ['9.09', '9.09', '1.81', '3.62', '1.81', '1.81', '9.09', '9.09', '1.81', '3.62', '1.81', '1.81']    
d = ['Zone 3', 'Zone 3', 'Zone 2']
Run Code Online (Sandbox Code Playgroud)

我希望将其作为输出实现,将第一个项目集压缩为示例:

[('#12908069', '85028', (9.09, 9.09), 'Zone 3'), ...]
Run Code Online (Sandbox Code Playgroud)

如何zip()从列表中为每个元组添加额外的项目c

Jac*_*cik 11

您可以使用步长为2的列表切片,请参阅说明Python的切片表示法:

list(zip(a,b,zip(c[0::2],c[1::2]),d))
Run Code Online (Sandbox Code Playgroud)


Pyn*_*hia 6

使用成语将数据系列zip文档聚类为n长度组:

>>> gr = [iter(c)]*2
>>> list(zip(a, b, zip(*gr), d))
[('#12908069', '85028,', ('9.09', '9.09'), 'Zone 3'),
 ('#12906115', '83646,', ('1.81', '3.62'), 'Zone 3'),
 ('#12904949', '77015,', ('1.81', '1.81'), 'Zone 2')]
Run Code Online (Sandbox Code Playgroud)

实质上,为了从列表中获取两个连续的元素,c我们在列表中放置了相同的迭代器,它gr由两个元素组成.

然后我们将这些相同的迭代器传递给zip(解压缩列表,就好像我们已经将两个迭代器作为两个独立的参数传递给它).

这具有从列表中收集每两个连续元素的效果c.

然后我们将这样的zip和其他列表再次拉链以扫描并配对整个批次.