2016-08-04 59 views
2

我想要做的是提取列表中的第零个元素和给定二维列表的另一个列表中的第一个元素。Python:可以在单个列表理解语句中完成

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 

x = [ a[0] for a in baseball ] 
y = [ a[1] for a in baseball ] 
print x 
print y 

这可以在单个列表理解语句中完成吗?

回答

2

假设它的矩形(即内部列表的长度是一致的。),可以实现如下:

def transpose(matrix): 
    return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] 

然后,你的问题是刚刚转(x, y = transpose(baseball))的调用。

+0

谢谢你完美工作 – Athar

2

如果你不介意的元组:

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 


x,y = zip(*baseball) 

如果你真的想名单:

x,y = map(list,zip(*baseball)) 

如果你有在每两个以上的元素,并希望只是某些元素,如:

baseball = [[180, 1, 78.4], 
      [215, 2, 102.7], 
      [210, 3, 98.5], 
      [188, 4, 75.2]] 

from operator import itemgetter 

x, y = zip(*map(itemgetter(0, 2), baseball)) 

这会给你:

((180, 215, 210, 188), (78.4, 102.7, 98.5, 75.2)) 
+0

标准警告:如果'baseball'为空,'zip(*棒球)'不会执行你正在寻找的转置。 – user2357112

+0

谢谢,工作完美,但正在寻找使用列表理解的解决方案 – Athar

相关问题