pet*_*zik 15 python list-comprehension
我想转换一个字符串,如下所示:
' 1 , 2 , , , 3 '
Run Code Online (Sandbox Code Playgroud)
进入非空元素列表:
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)
我的解决方案是这个列表理解:
print [el.strip() for el in mystring.split(",") if el.strip()]
Run Code Online (Sandbox Code Playgroud)
只是想知道,有没有一种漂亮的,pythonic的方式来写这种理解而不需要el.strip()两次打电话?
Wil*_*sem 20
您可以在列表解析中使用生成器:
[x for x in (el.strip() for el in mylist.split(",")) if x]
# \__________________ ___________________/
# v
# internal generatorRun Code Online (Sandbox Code Playgroud)
因此,生成器将提供剥离的元素,并且我们遍历生成器,并且仅检查真实性.因此,我们节省了el.strip()电话费.
您也可以使用map(..)它(使其更具功能性):
[x for x in map(str.strip, mylist.split(",")) if x]
# \______________ ________________/
# v
# mapRun Code Online (Sandbox Code Playgroud)
但这基本上是相同的(尽管生成器的逻辑 - 在我看来 - 更好地封装).
作为获取非空元素列表的简单替代方法(除了以前的好答案):
import re
s = ' 1 , 2 , , , 3 '
print(re.findall(r'[^\s,]+', s))
Run Code Online (Sandbox Code Playgroud)
输出:
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)
如何regex从字符串中提取所有数字
import re
a = ' 1 , 2 , , , 3 '
print(re.findall(r'\d+', a))
Run Code Online (Sandbox Code Playgroud)
输出:
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)