我有一個預先創建的整數串列,如果值符合條件,我想遍歷并附加“正”或“負”。然而,它在我的 if 陳述句的第一行拋出“TypeError: '>' not supported in 'str' 和 'int' 的實體。我之前在獲取用戶輸入時看到過這個錯誤,必須將輸入轉換為 int,但我的串列已經是一個整數,所以我對需要修復的內容感到困惑。它正在拋出錯誤if lst[i] > 0:
lst = [-2, 1, -2, 7, -8, -5, 0, 5, 10, -6, 7]
for i in lst:
if lst[i] > 0:
lst.append("positive")
elif lst[i] < 0:
lst.append("negative")
else:
lst.append("zero")
uj5u.com熱心網友回復:
解決方案
[('negative', 'zero', 'positive')[((n > 0) - (n < 0)) 1] for n in lst]
解釋
在線代碼使用串列理解來創建串列。
('negative', 'zero', 'positive')是從中獲取字串的字串元組。[((n > 0) - (n < 0)) 1]獲取字串。讓我們分解這個:子運算式 (se)
(n > 0) - (n < 0)給出 n 的符號(如果 n < 0,則為 -1,如果 n == 0,則為 0,如果 n > 0,則為 1) 注意:Python 沒有sign函式。# Keep in mind that True = 1 and False = 0 if n < 0 'se' evaluates to False - True => 0 - 1 => -1 if n > 0 'se' evaluates to True - False => 1 - 0 => 1 if n == 0 'se' evaluates to False - False => 0 - 0 => 0然后我們加 1 得到:0 如果 n < 0,1 如果 n = 0,2 如果 n > 0。
最后,我們使用這個整數作為字串元組中的索引。
等效代碼是:
strings=('negative', 'zero', 'positive')
def sign(n):
"""Returns the sign of n: -1 if n < 0, 0 if n == 0, 1 if n > 0"""
return (n > 0) - (n < 0)
rtn = [] # will get the result
for n in lst:
index = sign(n) 1
string = strings[index]
rtn.append(string)
uj5u.com熱心網友回復:
你應該這樣做:
lst = ["positive" if el > 0 else "negative" if el < 0 else "zero" for el in [-2, 1, -2, 7, -8, -5, 0, 5, 10, -6, 7]]
更快更干凈的方式來創建你需要的東西。
回傳:
['negative', 'positive', 'negative', 'positive', 'negative', 'negative', 'zero', 'positive', 'positive', 'negative', 'positive']
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323931.html
