【问题标题】:Python: list comprehension with boolean as return valuePython:以布尔值作为返回值的列表推导
【发布时间】:2019-04-15 09:38:04
【问题描述】:

B 是大小为k 的二次矩阵。

我尝试了以下代码

if [x for x in range(k) if B[x,1] == 1]:

得到:

对于range(k-1)中的第一个x,其中B[x,1] == 1,停止for循环并返回true,这样if语句就可以执行了。如果没有这样的x,则返回false,继续下面的代码。

【问题讨论】:

  • 什么是quadratic matrix of size k?你能提供一个minimal reproducible example吗?
  • 仅当您对创建列表感兴趣时才使用列表推导。

标签: python python-3.x for-loop if-statement list-comprehension


【解决方案1】:

看起来你想要any():

if any(B[x,1] == 1 for x in range(k)):

【讨论】:

  • 第一个 x 的条件满足后,for 循环是否停止?
  • @user4309 是的,any() 会做到这一点。
【解决方案2】:

arshajii's answer 可能是正确的,但如果您还希望第一个 x 的值满足您的条件,您可以这样做:

try:
    x = next(x for x in range(k) if B[x, 1] == 1)
    # Do something with x
except StopIteration:
    # Do something else

编辑:更好,谢谢@arshajii:

x = next(x for x in range(k) if B[x, 1] == 1, None)
if x is not None:
    # Do something with x
else:
    # Do something else

【讨论】:

  • 您也可以使用x = next((x for x in range(k) if B[x, 1] == 1), None),然后检查x 是否为None,而不是捕获异常。
  • @arshajii 我总是忘记那个,它好多了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多