从元组中删除 None

Remove None from tuple

之前关于如何从列表中删除 None 的回答对我没有帮助! 我正在创建一个元组列表:

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)

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

Post 处理中

只需在列表理解语句中将生成器tuple(..)构造函数一起使用:

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

改变"packing"算法

使用 packing 我的意思是将 m×n 项列表转换为 n "slices" 个 m 个元素(这是您的第一个代码片段所做的)。

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

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

直接。这可能也会更有效一些,因为在这里我们从来没有首先生成带有 Nones 的元组(假设 postList 当然不包含 Nones)。