我无法获得与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]]
。但我无法得到答案。请以正确的方式建议我。
答案 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
组成。