所以我有一个元组列表。列表中的每个元组将具有相同的长度,但元组大小将根据列表而变化。例如,一个列表可以包含长度为4的元组,另一个列表可以包含长度为5的元组。我想解压缩元组的每个单独值,并使用每个值将其乘以另一个列表中的元素。例如(带有长度为3的元组列表):
somelist = [a,b,c]
tuplelist = [(2,3,5),(5,7,5),(9,2,4)]
listMult = []
for x,y,z in tuplelist:
listMult.append([somelist[0]*x,somelist[1]*y,somelist[2]*z])
这个问题是,如果我使用另一个包含不同大小元组的列表,它将无法扩展。
答案 0 :(得分:2)
如果您不知道每个元组有多少元素,那么解压缩会是一个坏主意。在您的示例中,您将执行以下操作:
listMult = [sum(x*y for x, y in zip(tup, somelist)) for tup in tuplelist]
通常,您会尝试使用迭代,starargs和其他直接操作迭代的东西而不是解包。
答案 1 :(得分:1)
如上所述,问题未完全明确。但是有一个有趣且有用的问题变体,“如何从未知长度的元组中解包固定数量的元素?”。
答案可能对您有用:
tuple_list = [(2,3), (5,7,5), (9,2,4,2)]
pad_tuple = (0, 0, 0)
for t in tuple_list:
t += pad_tuple # make sure the tuple is sufficiently long
x, y, z = t[:3] # only extract the first three elements
print(x,y,z)