2017-07-08 32 views
-1

我無法獲得嵌套for loop。這裏的條件if statement正確的值是寫在代碼的例子,如何獲得真值在循環與if語句

# 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]此.The代碼是對應的值,

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

當我們multipy D11和q P1我們得到的值作爲[26,35 , 9 ,22]。因此,如果我們用H1比較,我們發現病情爲第二排即35< 40和第三排即9 < 100。所以答案是[[6,8,1],[1,1,1]]。但我無法找到答案。請給我建議的正確方法..

回答

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 

你的代碼中有另一個bug:通過列表解析完成的時候,i永遠是最後一個索引。

+0

'aa [i]'?什麼是'我'? –

+0

@rickert好點 – DeepSpace

+0

但是它只返回最後一個值,如果條件對於某個值介於兩者之間爲真。 – Manasaveena

0

你的條件相當於:

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

即。你正在檢查列表是否非空。它不是空的 - 它由四個False組成。

+0

是的,它由4個「False」值組成,但我需要返回空列表 – Manasaveena

1

列表理解不同於您的想法。您正在檢查列表是否不爲空,並返回列表的最後一個元素。

你想要的是像成才:

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

如果c是不是空的,你知道,超過10元已經在列表中。