【问题标题】:How can I do a for comprehension with if/elif, and no else?我怎样才能用 if/elif 做一个理解,而不是别的?
【发布时间】:2021-11-05 11:42:41
【问题描述】:

我想从中创建一个理解:

for w in s:
    if w in pw_set:
        a[w] += 1
    elif t in nw_set:
        a[w] += 1

我有类似的东西,但它不起作用

[(a[w]+=1) if (w in pw_set) else (a[w]+=1) if (w in nw_set) for w in s]

【问题讨论】:

  • 您所写的内容不适合使用列表理解。你最好用你的 for 循环。
  • 好吧,谢谢:)
  • 什么是“t”?什么是“一”?
  • w 是来自 s 的单词,一个列表,a 是一个字典(key:w, value: occurrency)

标签: python list-comprehension


【解决方案1】:

如果你真的,绝对想要通过列表理解来做到这一点,你需要一个collections.Counter 来将结果累积到。 (它可以从一个平面值列表中计算出现次数。)

> pw_set = {'a','b', 'c'}
> nw_set = {}
> s = ['a', 'b', 'q', 'z', 'e']
> a = collections.Counter(
    [
        w
        for w in (
            w if (w in pw_set or w in nw_set) else None
            for w in s
        )
        if w is not None
    ]
)
Counter({'a': 1, 'b': 1})

【讨论】:

  • 它比我在问题中写的 for 循环快吗?我的想法是,这两个集合的每个元素都是一个组合的字典键集,每个值都是单词的出现次数。
  • 不,这可能会更慢。
  • 好的,非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2021-04-13
  • 2021-10-25
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多