如果該元素不是數字,我定義了一個函式來將串列的元素更改為數字 0。它使用串列理解作業,但當我使用普通for回圈時它不起作用。我試圖了解for回圈中的錯誤是什么。
請參閱下面的代碼:
def zerozero(mylist):
mylist = [0 if type(x) == str else x for x in mylist]
return mylist
def zerozero2(mylist):
for x in mylist:
if type(x) == str:
x = 0
else:
x = x
return mylist
uj5u.com熱心網友回復:
您的第二個功能并不完全相同。你需要這樣的東西:
def zerozero2(mylist):
new_list = []
for x in mylist:
if type(x) == str:
new_list.append(0)
else:
new_list.append(x)
return new_list
通過這種方式,您可以模仿串列推導式的功能,創建一個新串列并在迭代時向其附加專案。
如果你想“就地”修改你的串列,你可以使用這種結構:
for idx, x in enumearte(mylist):
if type(x) == str:
mylist[idx] = 0
else:
mylist[idx] = x
但是,實際上這不太可能對您的代碼效率產生太大影響。你不能用串列推導來做到這一點,在任何一種情況下,當你從函式回傳時,你都可以將新串列重新分配回原始變數:
mylist = zerozeroX(mylist)
uj5u.com熱心網友回復:
所以會發生什么是您的函式回傳與您的輸入相同的串列。
您應該做的是先創建一個空串列。例如 my_list_0 = []。
def zerozero2(mylist):
my_list_0 = []
for x in mylist:
if type(x) == str:
x=0
else:
x=x
my_list_0.append(x)
return my_list_0
串列推導本質上將新值回傳到您的原始串列中,所以這就是它不同的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327044.html
上一篇:只獲取地圖的第一個元素
下一篇:作業表中的For回圈更改故障
