2014-10-11 48 views
0

我有一個元組的列表,我想將每個元組的第一個元素提取到另一個列表。 我一個元組列表稱爲「列表」,並試圖元素提取到名爲「列表2」名單,我得到的是:使用列表理解從元組中提取元素

>>> list = [ (1,2), (3,4), (5,6)] 
>>> list2 = [] 
>>> list2 = [] 
>>> [list2[i] = list[i][0] for i in range(len(list))] 
    File "<stdin>", line 1 
    [list2[i] = list[i][0] for i in range(len(list))] 
      ^
SyntaxError: invalid syntax 

你們能幫助找出什麼是不對的語法?

回答

0

在列表理解中,只有表達式纔會出現。 list2[i] = list[i][0]是轉讓陳述

而且,您不需要使用索引來訪問項目。只需重複列表。

>>> lst = [ (1,2), (3,4), (5,6)] 
>>> lst2 = [x[0] for x in lst] 
>>> lst2 
[1, 3, 5] 

順便說一句,不要使用list作爲變量名稱。它陰影內置類型/功能list

+0

非常感謝! 關於列表的事情:我知道,我只在終端(運行時)使用list作爲變量名。 – spine 2014-10-11 01:40:04

+2

@coding_brainfart,即使在交互式shell中,我也不推薦使用'list'。一旦你使用它,你不能做如下的事情:'list('abc')'。 – falsetru 2014-10-11 01:42:47

+0

@coding_brainfart - Guido(Python的創建者)推薦使用後綴名稱,否則這些名稱可能會將內置內容映射爲下劃線。所以你可以使用'list_'而不是'list',例如。大多數情況下,我發現這裏出現了'id_',以避免隱藏內置函數'id'。 – ArtOfWarfare 2014-10-11 01:45:55

2

使用lstlst2作爲其他人已注意到的變量名稱list是一個不好的選擇。

你不需要索引。使用索引通常被認爲是不好的形式。

lst2 = [ pair[0] for pair in lst]

如果你真的需要索引,對於一些數學什麼的。

lst2 = [ lst[i][0] for (i, pair) in enumerate(lst)]

如果您需要處理數字的2個維矩陣,你可能想了解numpy,並期待在numpy.matrixnumpy.array

0

在循環一行中的列表時,無法使用equals運算符設置變量。你可以簡單地做這樣的:

list = [ (1,2), (3,4), (5,6)] 
list2 = [] 
[list2.append(list[i]) for i in range(len(list))] 
+0

你可以,但你真的不應該。 :) 1)其他人已經提到使用'list'作爲變量名,但我想你只是從問題中複製。 2)使用'for in in range(len(some_list))'很少需要,因爲我們可以直接迭代序列類型。 3)'list.append()'返回'None',所以你很浪費地創建一個充滿'None'的列表,然後把它扔掉。 – 2014-10-11 04:26:00

0

另一種方式做,這是zip()

>>> lst = [(1,2), (3,4), (5,6)] 
>>> zip(*lst) 
[(1, 3, 5), (2, 4, 6)] 
>>> zip(*lst)[0] 
(1, 3, 5) 
>>> list(zip(*lst)[0]) 
[1, 3, 5] 

然而,這是一個有點浪費時,你只需要一個列表。