3

我想对我的代码进行一些重构,我记得在 perl 中有一些 (a, b, c) = (x, y, z)类似“多重分配”的语句。我也听说这个东西存在于 python 中,但我不需要完全“多重分配”。

我有 3 个大小相同的列表,我需要知道 - 我可以通过以下方式从它们中获取项目:

for a, b, c in a_list, b_list, c_list:
   pass

对于我的测试,它只获取 a_list 的前 3 个元素,(a = a_list[0], b = a_list[1], c = a_list[2])但我需要从 a_list 获取一个元素,从(a = a_list[0])b_list获取一个元素,(b = b_list[0])并且从c_list每次迭代中获取下一个元素。

4

2 回答 2

5

使用zip

for a, b, c in zip(a_list, b_list, c_list):
   pass

您的代码不起作用,因为它实际上相当于:

for lis in (a_list, b_list, c_list):
    a, b, c = lis  #assign the items of list fetched from the `tuple` to a, b ,c
于 2013-11-10T20:24:11.337 回答
5

你可以做:

for a, b, c in zip(a_list, b_list, c_list):
   pass

如果列表长度不相等,您可以使用itertools.izip_longest当一个列表比另一个列表长时使用“填充值”。

于 2013-11-10T20:24:23.480 回答