2017-04-13 69 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(..)'语句的输出。 –