以前关于如何从列表中删除无的答案不会帮助我! 我正在创建一个元组列表:
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)
答案 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
。)