Python 我如何 link 2 个列表?
Python how do I link 2 lists?
我有 2 个列表
[902920,28393892,93993992,93938939929,929393993928,38982933939393, 883383938393]
[1.9, 1,7, 1,6]
基本上 1.9
link 到 902920,28393892,93993992
1.7
link 到 93938939929,929393993928,38982933939393
在for循环中我需要
request.get(1.9
,然后是第一个列表中的 3 个数字)
然后 1.7
和接下来的 3 个数字
无论如何要做到这一点link?
抱歉,我应该提到 1.6 可以 linked 到列表中的下两个数字,另一个数字 1.5 可以 linked 到下一个 7。
more-itertools
具有此 grouper
功能,可用于此任务。我replicate it这里:
from itertools import zip_longest
def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
"Collect data into non-overlapping fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, fillvalue='x') --> ABC DEF Gxx
# grouper('ABCDEFG', 3, incomplete='strict') --> ABC DEF ValueError
# grouper('ABCDEFG', 3, incomplete='ignore') --> ABC DEF
args = [iter(iterable)] * n
if incomplete == 'fill':
return zip_longest(*args, fillvalue=fillvalue)
if incomplete == 'strict':
return zip(*args, strict=True)
if incomplete == 'ignore':
return zip(*args)
else:
raise ValueError('Expected fill, strict, or ignore')
此函数以如下所示的方式与 zip
(documentation) 结合 returns 一个元组的迭代器,其中元组的第一个元素是来自 [=18= 的元素],元组的第二个元素是取自 a
的三个元素的元组。对于此示例,zip
返回的迭代器将 1.9
链接到 a
的前三个元素,1.7
链接到 a
的后三个元素,依此类推上。
a = [902920,28393892,93993992,93938939929,929393993928,38982933939393, 883383938393]
b = [1.9, 1.7, 1.6]
c = zip(b, grouper(a, 3))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))
(1.6, (883383938393, None, None))
grouper
函数提供了额外的功能。默认情况下,长 a
列表中没有足够的元素来填充三元组,空元素将用 None
填充。因此,如果您希望获得 None
以外的值,您可以将 fillvalue
设置为其他值,或者您甚至可以声明您不想要不完整的元组,如本例所示
c = zip(b, grouper(a, 3, incomplete = 'ignore'))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))
我有 2 个列表
[902920,28393892,93993992,93938939929,929393993928,38982933939393, 883383938393]
[1.9, 1,7, 1,6]
基本上 1.9
link 到 902920,28393892,93993992
1.7
link 到 93938939929,929393993928,38982933939393
在for循环中我需要
request.get(1.9
,然后是第一个列表中的 3 个数字)
然后 1.7
和接下来的 3 个数字
无论如何要做到这一点link?
抱歉,我应该提到 1.6 可以 linked 到列表中的下两个数字,另一个数字 1.5 可以 linked 到下一个 7。
more-itertools
具有此 grouper
功能,可用于此任务。我replicate it这里:
from itertools import zip_longest
def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
"Collect data into non-overlapping fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, fillvalue='x') --> ABC DEF Gxx
# grouper('ABCDEFG', 3, incomplete='strict') --> ABC DEF ValueError
# grouper('ABCDEFG', 3, incomplete='ignore') --> ABC DEF
args = [iter(iterable)] * n
if incomplete == 'fill':
return zip_longest(*args, fillvalue=fillvalue)
if incomplete == 'strict':
return zip(*args, strict=True)
if incomplete == 'ignore':
return zip(*args)
else:
raise ValueError('Expected fill, strict, or ignore')
此函数以如下所示的方式与 zip
(documentation) 结合 returns 一个元组的迭代器,其中元组的第一个元素是来自 [=18= 的元素],元组的第二个元素是取自 a
的三个元素的元组。对于此示例,zip
返回的迭代器将 1.9
链接到 a
的前三个元素,1.7
链接到 a
的后三个元素,依此类推上。
a = [902920,28393892,93993992,93938939929,929393993928,38982933939393, 883383938393]
b = [1.9, 1.7, 1.6]
c = zip(b, grouper(a, 3))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))
(1.6, (883383938393, None, None))
grouper
函数提供了额外的功能。默认情况下,长 a
列表中没有足够的元素来填充三元组,空元素将用 None
填充。因此,如果您希望获得 None
以外的值,您可以将 fillvalue
设置为其他值,或者您甚至可以声明您不想要不完整的元组,如本例所示
c = zip(b, grouper(a, 3, incomplete = 'ignore'))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))