假设:
a = 'aaa'
b = ''
c = 'ccc'
d = ''
e = 'eee'
list = (a, b, c, d, e)
如何使用列表中所有非空元素获取字符串?
期望的输出:
'aaa,ccc,eee'
答案 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
。)