-1

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

# 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进行比较,我们发现第二行即第三行即条件为。所以答案是。但我无法得到答案。请建议我正确的方法..35< 409 < 100[[6,8,1],[1,1,1]]

4

3 回答 3

1

您的if声明是检查由列表推导创建的列表
[aa[i] > 10 for i in range(len(a))](即 list [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将始终是最后一个索引。

于 2017-07-08T10:17:37.670 回答
1

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

你想要的是这样的:

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

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

于 2017-07-08T10:18:57.347 回答
0

您的情况相当于:

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

IE。您正在检查列表是否为非空。它是非空的——它由四个Falses 组成。

于 2017-07-08T10:17:53.970 回答