以前关于如何从列表中删除 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)
元组是不可变的,因此一旦您构建了一个元组,您就不能改变它的长度或设置它的元素。因此,您唯一的选择是构建新元组作为后处理步骤,或者一开始就不要生成这些元组。
后处理
只需在 list comprehension 语句中使用 generator 和 tuple(..)
构造函数:
[tuple(xi for xi in x if xi is not None) for x in data]
改变“打包”算法
使用打包 我的意思是将m×n 项列表转换为n 个m“切片”元素(这是您的第一个代码片段所做的)。
如果——就像变量名似乎暗示的那样——pointList
是一个列表。您可以省去使用 zip
的麻烦,并使用:
[tuple(pointList[i:i+3]) for i in range(0,len(pointList),3)]
直接。这可能也会更有效一些,因为在这里我们从一开始就不会生成带有 None
的元组(假设 postList
不包含 None
当然)。
我是一名优秀的程序员,十分优秀!