Python 从元组中删除None

Python 从元组中删除None,python,tuples,nonetype,Python,Tuples,Nonetype,以前关于如何从列表中删除“无”的答案对我没有帮助! 我正在创建一个元组列表,其中包含: list(zip(*[iter(pointList)] *3)) 所以我得到的是 [(object1,object2,object3),(object4,object5,object6),(object7,None,None)] 或 我想删除元组中的None(它只能出现在列表的最后一个条目上!)。因此,我期望的输出是: [(object1,object2,object3),(object4,object5

以前关于如何从列表中删除“无”的答案对我没有帮助! 我正在创建一个元组列表,其中包含:

list(zip(*[iter(pointList)] *3))
所以我得到的是

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

我想删除元组中的None(它只能出现在列表的最后一个条目上!)。因此,我期望的输出是:

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

我认为对我有帮助的是:

filter(None,myList)

元组是不可变的,因此一旦构建元组,就不能改变其长度或设置其元素。因此,您唯一的选择是作为后处理步骤构造新元组,或者不首先生成这些元组

后处理 只需在列表理解语句中使用带有
元组(..)
构造函数的生成器:

[tuple(xi for xi in x if xi is not None) for x in data]
改变“打包”算法 对于打包,我的意思是将一个m×n项的列表转换为m个元素的n个“片段”(这是您的第一个代码片段所做的)

如果-如变量名所示-
点列表
是一个列表
。您可以省去使用
zip
的麻烦,并使用:

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

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

你能展示一下你的尝试吗?元组是不可变的-你不能在适当的地方更改它们。好的,所以我必须构建我的列表,否则?:)很高兴听到,我不知道这一点(只有Java背景),我会尝试这一点啊,看起来这不起作用,因为我简化了我的问题,我实际上没有可编辑的对象。@lolio:但是
数据
是您的
列表(…)
语句的输出。更新后的答案非常有效,几分钟后即可接受!注意到itertools.zip\u在默认情况下似乎添加了“无”,但很难“排除”——而且后处理似乎是这种方法的唯一处理方法。这是正确的还是我使用itertools.zip_的方法不正确?
[tuple(xi for xi in x if xi is not None) for x in data]
[tuple(pointList[i:i+3]) for i in range(0,len(pointList),3)]