来自列表中多个值的元组
Tuple from multiple values in a list
如何使用相应列表中的每个值从第一个元素创建多个元组?
期望的结果:[(0,727), (0,1), (0,766), (0,950)...]
谢谢
嵌套推导会起作用:
data = [(0, [727, 1, ...]), (1, [...]), ...]
tpls = [(x, y) for x, lst in data for y in lst]
您可以使用 itertools.product
在两个可迭代对象之间创建成对的非重复组合。
from itertools import product
s_value = [[727, 1, 766], [989, 1067, 895], [21, 22, 23]]
c_keys = range(0, 3)
for c_key, s_val in zip(c_keys, s_value):
print(list(product([c_key], s_val)))
>> [(0, 727), (0, 1), (0, 766)]
>> [(1, 989), (1, 1067), (1, 895)]
>> [(2, 21), (2, 22), (2, 23)]
如果你想创建一个包含所有组合元组的大列表。您可以添加 more-itertools
的 flatten
功能
from more_itertools import flatten
from itertools import product
combs = [list(product([c_key], s_val)) for c_key, s_val in zip(c_keys, s_value)]
print(combs)
>> [[(0, 727), (0, 1), (0, 766)], [(1, 989), (1, 1067), (1, 895)], [(2, 21), (2, 22), (2, 23)]]
all_combs = list(flatten(combs))
print(all_combs)
>> [(0, 727), (0, 1), (0, 766), (1, 989), (1, 1067), (1, 895), (2, 21), (2, 22), (2, 23)]
你可以试试这样的...
lst = [(0,[0,1,2,3,4]),
(1,[5,6,7,8,9])]
for key, value in lst:
lst1 = [key] * len(value) # has a list of key repeated n times
print(list(zip(lst1,value)))
输出
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
[(1, 5), (1, 6), (1, 7), (1, 8), (1, 9)]
如何使用相应列表中的每个值从第一个元素创建多个元组?
期望的结果:[(0,727), (0,1), (0,766), (0,950)...]
谢谢
嵌套推导会起作用:
data = [(0, [727, 1, ...]), (1, [...]), ...]
tpls = [(x, y) for x, lst in data for y in lst]
您可以使用 itertools.product
在两个可迭代对象之间创建成对的非重复组合。
from itertools import product
s_value = [[727, 1, 766], [989, 1067, 895], [21, 22, 23]]
c_keys = range(0, 3)
for c_key, s_val in zip(c_keys, s_value):
print(list(product([c_key], s_val)))
>> [(0, 727), (0, 1), (0, 766)]
>> [(1, 989), (1, 1067), (1, 895)]
>> [(2, 21), (2, 22), (2, 23)]
如果你想创建一个包含所有组合元组的大列表。您可以添加 more-itertools
flatten
功能
from more_itertools import flatten
from itertools import product
combs = [list(product([c_key], s_val)) for c_key, s_val in zip(c_keys, s_value)]
print(combs)
>> [[(0, 727), (0, 1), (0, 766)], [(1, 989), (1, 1067), (1, 895)], [(2, 21), (2, 22), (2, 23)]]
all_combs = list(flatten(combs))
print(all_combs)
>> [(0, 727), (0, 1), (0, 766), (1, 989), (1, 1067), (1, 895), (2, 21), (2, 22), (2, 23)]
你可以试试这样的...
lst = [(0,[0,1,2,3,4]),
(1,[5,6,7,8,9])]
for key, value in lst:
lst1 = [key] * len(value) # has a list of key repeated n times
print(list(zip(lst1,value)))
输出
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
[(1, 5), (1, 6), (1, 7), (1, 8), (1, 9)]