1

所以我有一个元组列表。列表中的每个元组长度相同,但元组大小会因列表而异。例如,一个列表可能包含长度为 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])

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

4

2 回答 2

2

如果您不知道每个元组有多少个元素,那么解包将是一个坏主意。在您的示例中,您将改为执行以下操作:

listMult = [sum(x*y for x, y in zip(tup, somelist)) for tup in tuplelist]

通常,您会尝试使用迭代、starargs 和其他直接在可迭代对象上操作的东西,而不是解包。

于 2013-08-04T00:53:26.493 回答
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)
于 2013-08-04T01:09:16.503 回答