我有一个库文件名列表,我需要根据正则表达式对其进行过滤,然后从匹配的文件中提取版本号。这是做到这一点的明显方法:
libs = ['libIce.so.33', 'libIce.so.3.3.1', 'libIce.so.32', 'libIce.so.3.2.0']
versions = []
regex = re.compile('libIce.so\.([0-9]+\.[0-9]+\.[0-9]+)')
for l in libs:
m = regex.match(l)
if m:
versions.append(m.group(1))
生成以下列表:
['3.3.1', '3.2.0']
但我觉得循环不是很“Python 风格”,并且觉得应该可以用一些巧妙的单行代码替换上面的“for”循环。 有什么建议吗?
最佳答案
列表理解怎么样?
In [5]: versions = [m.group(1) for m in [regex.match(lib) for lib in libs] if m]
In [6]: versions
Out[6]: ['3.3.1', '3.2.0']
关于python - 列表过滤和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665667/