2014-12-07 53 views
0

我感覺今晚有更多的啞巴。如果我有一個基本的多維列表:從多維數組中選擇2列 - 列表理解

my_list = [['Bob', 43, 'Tall', 'Green'], 
      ['Sally', 32, 'Short', 'Blue'], 
      ['Tom', 54,'Medium','Orange']] 

我可以輕鬆地使用列表理解搶到第一列:

new_list = [row[0] for row in my_list] 

或者我可以抓住3列:

new_list = [row[0:3] for row in my_list] 

但我如何才能抓取第1列和第3列?

new_list = [row[0,2] for row in my_list] 

如果沒有列表理解,那麼如何用最少的代碼完成?

回答

2

方式一:

new_list = [[row[0], row[2]] for row in my_list] 

在這種方法你自己構建一個新的列表,每一行和你把元素02在那裏爲元素。

1
import operator 

In [7]: answer = [operator.itemgetter(0,2)(s) for s in my_list] 

In [8]: answer 
Out[8]: [('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')] 
0

除了什麼@Simeon維瑟寫的,你也可以使用itemgetter:

my_list = [['Bob', 43, 'Tall', 'Green'], 
      ['Sally', 32, 'Short', 'Blue'], 
      ['Tom', 54,'Medium','Orange']] 

from operator import itemgetter 

itg = itemgetter(0,2) 

print([itg(row) for row in my_list]) 

給出:

[('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')] 
+0

@PadraicCunningham THX。沒有注意到這一點。 – Marcin 2014-12-07 07:42:05

1

雖然你當然可以使用itemgetter - 你不需要分配給變量,您也不需要完全限定其名稱:

from operator import itemgetter 
[itemgetter(0,2)(row) for row in my_list] 

你也可以只是做itemgetter呢,在這種情況下,就意味着你的列表中理解裏面嵌套列表理解:

[[row[i] for i in [0,2]] for row in my_list]