妳的問題是妳不懂列表推導的語法。
先說說妳寫的代碼有什麽問題,因為列表求導是壹種語法糖果。我對語法糖果的理解是代碼的簡化書寫。妳可以簡單的理解為,正常的寫作可能需要65,438+00行,可能用語法糖果來完成。優點是可以減少代碼量,缺點也很明顯,就是比常規的寫法壹開始更難學習和理解。
列表推導寫作:?n = [ j if j*5==10 ]
將1行的列表轉換成傳統的書寫方法需要三行:
不知道題主有沒有看到轉換後的代碼中的問題,但是這三行代碼列表沒有問題。第壹行是給n分配壹個空列表;第二行是判斷變量j*5的結果是10;第三行是結果。如果第二行的條件成立,J將被追加到列表n中.
但是問題也出來了。第二行,if的條件部分變量J的值是什麽?妳之前沒有定義變量j,所以在這裏直接使用肯定是不對的,因為python中的變量都是先定義了才可以使用的。
舉個小例子:
從上圖可以看出,沒有A賦值的時候,可以直接使用,會提示變量A還沒有定義。而妳給A賦值3後,重用的時候會直接輸出A的值,3就是原因。
-
下面是最常見的用法:
壹般的列表推導是for和if同時存在:
n =[如果j*5==10,則j在(10)範圍內]
根據上面提到的邏輯,在for語句中為變量J提供壹個值,然後將這個值代入if中的條件表達式,看它是否成立,如果成立,則將J追加到列表n中.
我們把這個列表的推導轉換成常規寫法:
上面的代碼形成了壹個完整的閉環。
所以學習列表推導的關鍵點是題主能否在常規代碼和列表推導之間進行轉換。如果是這樣的話,題主可以在編寫完列表派生之後將其轉換成常規代碼。如果常規代碼沒問題,列表推導自然是正確的。
-
延伸閱讀:
網頁鏈接這個鏈接裏有壹些簡單的例子,裏面既有列表推導的寫法,也有相應的常規寫法。題主不難研究兩者是如何轉換的。
=====
希望能對題主有所幫助。歡迎提問。