2017-04-13 39 views
2

以前的答案如何從列表中刪除無不幫助我! 我創建的元組的列表,包括:刪除元組

list(zip(*[iter(pointList)] *3)) 

所以我有什麼是

[(object1,object2,object3),(object4,object5,object6),(object7,None,None)] 

[(object1,object2,object3),(object4,object5,object6),(object7,object8,None)] 

,我想刪除無在元組(只可以在列表的最後一個條目出現!)。所以,我需要的輸出將是:

[(object1,object2,object3),(object4,object5,object6),(object7)] 

[(object1,object2,object3),(object4,object5,object6),(object7,object8)] 

我以爲會幫助我的是:

filter(None,myList) 
+0

你能展示你試過的嗎? – glibdud

+2

元組是不可變的 - 你不能改變它們。 – CodeCupboard

+0

好吧,所以我必須建立我的名單,否則? – greedsin

回答

4

元組是不變所以一旦你建立一個元組你不能更改其長度或設置其元素。因此,您的唯一選擇是構造新的元組作爲後處理步驟,或者不要首先生成這些元組。

後處理

只需在一個列表理解語句中使用發電機tuple(..)構造:

[tuple(xi for xi in x if xi is not None) for x in data] 

改變 「包裝」 算法

隨着包裝我意思是轉換一個列表m × n items into n「slices」m elements(這是你的第一個代碼片段所做的)。

如果 - 像變量名似乎建議 - pointList是列表。您可以保存自己使用zip的麻煩,而努力:

[tuple(pointList[i:i+3]) for i in range(0,len(pointList),3)] 

直接。這可能會更有效一些,因爲這裏我們從來不會首先生成None s的元組(因爲postList當然不包含None)。

+0

:)很高興聽到,我不知道這(只有Java背景),我會試試這個 – greedsin

+0

啊看起來這不工作,因爲我簡化了我的問題,我已經acutally沒有可迭代的對象。 – greedsin

+0

@lolio:但'data'是你的'list(..)'語句的輸出。 –