从元组中删除无

时间:2017-04-13 14:17:21

标签: python tuples nonetype

以前关于如何从列表中删除无的答案不会帮助我! 我正在创建一个元组列表:

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

所以我拥有的是

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

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

我想删除元组中的None(只能在列表的最后一个条目中出现!)。所以我想要的输出是:

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

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

我认为对我有用的是:

filter(None,myList)

1 个答案:

答案 0 :(得分:6)

元组是不可变的所以一旦你构造了一个元组,你不能改变它的长度或设置它的元素。因此,您唯一的选择是将 new 元组构造为后处理步骤,或者首先不生成这些元组。

后期处理

只需在 list comprehension 语句中使用带有tuple(..)构造函数的生成器

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

更改“打包”算法

使用打包我的意思是将 m×n 项目列表转换为 m n “切片”元素(这是你的第一个代码片段所做的)。

如果 - 如变量名称似乎暗示 - pointList是一个列表。您可以省去使用zip的麻烦,并使用:

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

直接。这可能会更高效,因为在这里我们从不首先生成None s的元组(当然postList不包含None。)