在列表理解中解压缩值

时间:2018-12-16 01:05:54

标签: python

我要执行以下操作:

A, B = [[x, y] for (x, y) in Z]

需要输出:

A = [x1, x2, ...] # xN are the N x values in Z
B = [y1, y2, ...]

有明显的解决方案:

A, B = [x for (x, y) in Z], [y for (x, y) in Z]

但是实际代码具有相当大的列表理解力,并且内部包含一些条件,因此应该保持这种方式,不仅可以节省代码行(和性能!),而且可以实现所需的程序行为(实际的当前代码仅检索) x for (x, y) in Z并将其分配给A)。

3 个答案:

答案 0 :(得分:3)

home

应该工作。根据Z的类型,您可能会摆脱:

A, B = zip(*([x, y] for (x, y) in Z))

答案 1 :(得分:1)

如果您说存在多个可能复杂的条件,请记住使用for循环可能会更适应。

A = []
B = []
for x, y in Z:
    if conditon_on_x:
        A.append(x)
    if condition_on_y:
        B.append(y)

答案 2 :(得分:1)

您可以通过使用zip来解压缩,方法是扩展 zip(* var)这样的变量:

>>> list_of_tuples = [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)]
>>> alpha, num = zip(*list_of_tuples)
>>> print(alpha)
('a', 'b', 'c', 'd', 'e')
>>> print(num)
(0, 1, 2, 3, 4)

之所以有效,是因为 zip(* list_of_tuples)扩展为 zip(('a',0),('b',1),('c',2), ('d',3),('e',4)),然后将所有这些元组拉链在一起,具有讽刺意味的是,将其解压缩。

但是我认为单凭列表理解实际上是不可能的,对不起!