【问题标题】:Remove None from tuple从元组中删除 None
【发布时间】:2017-09-09 17:16:59
【问题描述】:

关于如何从列表中删除 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)

【问题讨论】:

  • 你能展示你的尝试吗?
  • 元组是不可变的——你不能就地改变它们。
  • 好的,否则我必须构建我的列表?

标签: python tuples nonetype


【解决方案1】:

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

后处理

只需在 list comprehension 语句中使用带有 tuple(..) 构造函数的 generator

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

改变“打包”算法

打包我的意思是把 m×n 个项目的列表转换成 nm 的“切片”元素(这是您的第一个代码片段所做的)。

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

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

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

【讨论】:

  • :) 很高兴听到,我不知道这个(只有 Java 背景),我会试试这个
  • 啊,看起来这不起作用,因为我简化了我的问题,我实际上没有可迭代的对象。
  • @lolio: 但data 是您的list(..) 语句的输出。
  • 更新后的答案效果很好,几分钟后就会接受!
  • 注意到 itertools.zip_longest 似乎默认添加了“无”(实际上并非如此),但很难“排除” - 似乎后处理是这种方法的唯一处理方法.这是正确的还是我错误地使用了 itertools.zip_longest?
猜你喜欢
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 2022-10-25
  • 2013-04-12
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多