python - 列表过滤和转换

标签 python list filtering transformation

我有一个库文件名列表,我需要根据正则表达式对其进行过滤,然后从匹配的文件中提取版本号。这是做到这一点的明显方法:

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/

相关文章:

python - list.pop 的 numpy 等价物?

替换数据框列表中编号列的 NA

arrays - Swift 过滤数组中的自定义对象

python - Tensorflow和随机洗牌队列 "insufficient elements (requested 64, current size 0)"

python - 将大文本文件(约 50GB)拆分为多个文件

list - 如何编写检查项目是否在树中的函数?

c# - 使用 linq 将字典值转换为列表

list - 从项目 0 到项目 314 过滤列表

javascript - 使用 jQuery 过滤类别

python - 如何使用 Pywikibot 获取 wiki 页面的 HTML?