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)]