在Python中选择列表的非空元素

时间:2017-11-15 20:41:02

标签: python string list

假设:

a = 'aaa'
b = ''
c = 'ccc'
d = ''
e = 'eee'

list = (a, b, c, d, e)

如何使用列表中所有非空元素获取字符串?

期望的输出:

'aaa,ccc,eee'

4 个答案:

答案 0 :(得分:1)

使用生成器表达式:

- source_labels: [__meta_consul_metadata_location]
    separator: ;
    regex: ldn
    replacement: $1
    action: keep

",".join(string for string in lst if len(string) > 0) 部分正在使用字符串的",".join()方法,该方法采用可迭代的参数并输出一个新的字符串,该字符串使用join()作为分隔符来连接项目。

括号内的生成器表达式用于从列表中过滤掉空字符串。

原始列表不会更改,也不会创建新的内存列表。

答案 1 :(得分:1)

您可以使用generator-expression

','.join(s for s in list if s)

outputs

'aaa,ccc,eee'

<强>为什么吗

这利用了empty string评估为False的事实。

通过一些例子可以看得更清楚:

>>> if "a":
...     print("yes")
... 
yes
>>> if " ":
...     print("yes")
... 
yes
>>> if "":
...     print("yes")
... 
>>>

所以generator说:对于string中的每个list,如果 string',请保持&#39; - 即string 1}}不是空的。

然后我们最终使用str.join方法,将string中传递给它的iterator(此处为generator)并将它们连接在一起str是。{因此,我们使用','作为string来获得所需的结果。

这方面的一个小例子:

>>> ','.join(['abc', 'def', 'ghi'])
'abc,def,ghi'

**作为旁注,您不应该为variable list命名,因为它会覆盖内置的list()函数:

>>> list((1, 2, 3))
[1, 2, 3]
>>> list = 1
>>> list((1, 2, 3))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

答案 2 :(得分:0)

你也可以尝试这个:

a = 'aaa'
b = ''
c = 'ccc'
d = ''
e = 'eee'
tup = (a, b, c, d, e)

res = ",".join(filter(lambda i: not i=='', tup))

print(res)

输出将是:

aaa,ccc,eee

最好不要将list用作变量名,因为它是Python的保留关键字。

答案 3 :(得分:0)

你可以做的最短的事情是

','.join(filter(None, mytuple))

(我在oder中将list重命名为mytuple,以便不影响内置list。)