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

时间:2017-07-08 10:12:09

标签: python python-2.7 optimization cvxopt

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

3 个答案:

答案 0 :(得分:1)

您的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将始终是最后一个索引。

答案 1 :(得分:1)

列表的理解与您的想法不同。您正在检查列表是否为空并返回列表的最后一个元素。

你想要的是:

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

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

答案 2 :(得分:0)

您的情况相当于:

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

即。您是否检查列表是否为空。它是非空的 - 它由四个False组成。