2016-08-04 65 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

相關問題