【问题标题】:Use only some items in a list comprehension? [duplicate]仅使用列表理解中的某些项目? [复制]
【发布时间】:2020-09-07 13:28:50
【问题描述】:

这当然是可能的。搜索结果为零。

如何创建仅从源列表或其他可迭代项中选择某些值的列表推导(或任何类型的推导)?


示例

假设我只想要列表中的偶数。例如,给定:

a = [1, 2, 3, 4, 5, 6, 7]

我可以通过 for 循环轻松做到这一点,但需要初始化一个变量:

b = []
for item in a:
    b.append(item) if item % 2 == 0
print(b)

返回:

[2, 4, 6]

但是如何在列表推导中做到这一点而不先初始化变量呢?


失败的列表理解

我试过了:

b = [ item if item % 2 == 0 for item in a ]

for 之后返回SyntaxError: invalid syntax

如果我添加一个 else xxx 它可以工作,但我必须拥有相同数量的总元素:

b = [ item if item % 2 == 0 else None for item in a ]

返回:

[None, 2, None, 4, None, 6, None]

如果项目不符合条件,我如何从最终理解中删除或过滤掉它们?

【问题讨论】:

  • 好吧 this question 通读后肯定是重复的,其余的很接近,但不一样。仍然不确定为什么这些都没有出现在搜索中——即使是在发布之前给出的“相关答案”列表也没有任何这些新的链接。我并不惊讶这已经得到了回答!干杯!!

标签: python filter list-comprehension


【解决方案1】:

写完问题后,相关项目列表间接提供了答案。

简单地说,我对语法的猜测是错误的——我只是把“if”放在了错误的地方。它在 for 语句之后:

a = [1, 2, 3, 4, 5, 6, 7]
b = [ item for item in a if item % 2 == 0 ]

我在this answer 中间接找到了答案,但问题有所不同。我找不到任何直接问这个问题的东西,所以我会把它留给像我这样仍在学习基本理解语法的其他菜鸟。

【讨论】:

  • 嗯。我可以发誓这种事情不断出现。但是我能找到的所有 似乎 都像一个重复的候选人,OP 已经知道如何去做,并提出了一些更微妙的后续问题。 ://
  • 也请接受您自己的答案。我认为您的问题在使用列表理解方面已得到完全回答。 (我的意思是在 48 小时等待期后不要忘记这样做;))
  • @KarlKnechtel 我确信它确实会不断出现,但是在我的 Python 之旅中,我第一次遇到了这个问题并最终查到了它。 :) 当我开始查看链接的答案时,几乎所有答案都提供了这样做的方法,但问题并不是针对这一点。也许这就是为什么它没有出现在我的搜索中,或者我只是使用了错误的搜索词。谁知道... :)
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2017-01-18
相关资源
最近更新 更多