【问题标题】:How to "else" in a list comprehension when the condition is non-boolean? [duplicate]当条件不是布尔值时,如何在列表理解中“else”? [复制]
【发布时间】:2015-09-14 15:18:50
【问题描述】:

给定一个列表,例如

a = ["No", 1, "No"]

我想将其转换为新列表(或者实际上只是重新分配列表),以便每个“否”都转换为 0,例如

[0,1,0]

如果我尝试以下列表理解:

[0 for i in a if i =="No"]

这显然会导致列表省略每个不是“否”的元素

[0,0]

如果我按照here 给出的引导并尝试:

[0 if "No" else i for i in a]

这给了我:

[0, 0, 0]

我猜这是因为“否”等于True

我对 if/else 在列表理解中的用法有什么误解?

【问题讨论】:

标签: python list python-2.7 if-statement list-comprehension


【解决方案1】:

使用== 运算符使其成为布尔表达式

>>> a = ["No", 1, "No"]
>>> [0 if i == "No" else i for i in a]
[0, 1, 0]

或者另一种方式是

>>> [[0, i][i != "No"] for i in a]
[0, 1, 0]

这是因为i != "No" 返回一个布尔值,然后可以将其解释为1 为真,0 为假。然后用于访问列表中的特定元素[0, i]

【讨论】:

  • [int(i != "No") for i in a][[1,0 ][i == "No"] for i in a] ;)
  • 呵呵。好把戏@Padraic。但是 OP 想要在原始列表中打印该项目,所以不能在这里使用它。 :(
  • 我猜[[0, i][i != "No"] for i in a] 应该可以解决问题
  • @Padraic 是的。谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 2011-02-26
  • 2017-08-26
  • 2023-03-29
  • 2019-12-03
  • 2020-05-29
  • 1970-01-01
相关资源
最近更新 更多