如何使用if语句在for循环中获取真值

how to get truth value in for loop with if statement

我无法获得嵌套在 for loop 中的条件 if statement 的正确值。这是一个用代码编写的示例,

# Input data
d11 = np.matrix([[3,6,1],[6,8,1],[1,1,1],[5,8,9]])
qp1 = np.matrix([[1],[3],[5]])
h1 = np.matrix([[5],[40],[100],[5]])

我需要 d11 matrix 的行,其与 qp1 相乘的值小于 h1 中的相应值,即 d11[i] * qp < h[i]. 代码是,

for x in range(len(d11)):
    if d11[x] * qp1 < h1[x]:
        a = d11[x]
    else:
        a = []

当我们将 d11 和 qp1 相乘时,我们得到的值为 [26,35 , 9 ,22]。因此,如果我们与 h1 进行比较,我们发现条件为 True 第二行,即 35< 40 和第三行,即 9 < 100。所以答案是 [[6,8,1],[1,1,1]]。但我无法得到 answer.Please 建议我正确方式..

您的 if 语句正在检查由列表理解创建的列表
[aa[i] > 10 for i in range(len(a))](即列表 [False, False, False, False])是否为空。

因为它不为空,所以 if 语句被评估为 True

相反,请考虑使用 any:

aa = [1, 4, 5, 6]
if any(num > 10 for num in aa):
    c = aa[i],'t'  # as (correctly) pointed out in the comments below,
                   # i is not defined here since we are no longer using an index
                   # to iterate over the list's elements.
                   # You'll need to decide what you want to do in case an element
                   # IS larger than 10.
else:
    c = 0

您的代码还有另一个错误:当列表理解完成时,i 将始终是最后一个索引。

您的条件相当于:

if len([aa[i] > 10 for i in range(len(a))]):

即。您正在检查列表是否为空。它是非空的 - 它由四个 Falses.

组成

Comprehensions 列表的评估方式与您想象的不同。您正在检查列表是否不为空以及 return 列表的最后一个元素。

你想要的是这样的:

aa = [1,4,5,6,101]
c = [elem for elem in aa if elem >10]

如果c不为空,就知道10以上的元素已经在列表中了。