解包未指定数量的变量

时间:2013-08-04 00:51:13

标签: python python-3.x

所以我有一个元组列表。列表中的每个元组将具有相同的长度,但元组大小将根据列表而变化。例如,一个列表可以包含长度为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])

这个问题是,如果我使用另一个包含不同大小元组的列表,它将无法扩展。

2 个答案:

答案 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)