【发布时间】:2012-03-30 11:39:37
【问题描述】:
我的头撞到了墙上:
基本上我想要的是从这个元组列表中删除“”项:
[('650', '724', '6354', '', '', ''), ('', '', '', '650', '723', '4539')]
并获得以下新列表:
[('650', '724', '6354'), ('650', '723', '4539')]
有什么想法吗?
【问题讨论】:
我的头撞到了墙上:
基本上我想要的是从这个元组列表中删除“”项:
[('650', '724', '6354', '', '', ''), ('', '', '', '650', '723', '4539')]
并获得以下新列表:
[('650', '724', '6354'), ('650', '723', '4539')]
有什么想法吗?
【问题讨论】:
Python 中的元组是不可变的。这意味着一旦创建了一个元组,就不能更改其中包含的元素。但是,您可以创建一个不包含您不想要的项目的 new 元组。例如:
>>> a = [('650', '724', '6354', '', '', ''), ('', '', '', '650', '723', '4539')]
>>> [tuple(y for y in x if y) for x in a]
[('650', '724', '6354'), ('650', '723', '4539')]
这使用列表解析[... for x in a] 来使用... 中的公式创建一个新列表。它使用生成器表达式y for y in x if y 创建一个包含x 元素的新元组仅 如果y 为真(意味着该值为真,或字符串为非空)。 p>
【讨论】:
a = [('650', '724', '6354', '', '', ''), ('', '', '', '650', '723', '4539')]
print [tuple(x for x in y if x) for y in a]
【讨论】: