我要执行以下操作:
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
)。
答案 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)),然后将所有这些元组拉链在一起,具有讽刺意味的是,将其解压缩。
但是我认为单凭列表理解实际上是不可能的,对不起!