用列表理解重写

时间:2013-12-04 15:09:57

标签: python list-comprehension

我正在尝试使用python list comprehension重写以下代码

vuln = []
for p in pkgs:
    m = get_close_matches(p, rpms)
    if m:
        vuln.append(m)

if vuln:
   print(vuln)

我的第一个版本在

之下
  vuln = [get_close_matches(p, rpms)
                            for p in pkgs]
  if vuln:
       print(vuln)

不幸的是,如果没有匹配项,它会生成一个空列表列表

[[], [], [], [], [], [], []]

1 个答案:

答案 0 :(得分:4)

这就是你想要的:

[m for m in (get_close_matches(p, rpms) for p in pkgs) if m]

因为您首先将p发送到函数中,然后检查函数返回是否有值。

这将迭代每个m项,并检查它是否有值,如果它有值,它将被提供给你。