2 回答

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個贊
你似乎誤解了你在做什么。這:
[x for y in z]
不是“內(nèi)聯(lián) for 循環(huán)”。一個for循環(huán)可以做任何事情,任何迭代迭代對象上。其中一個東西for回路可以做的就是創(chuàng)建一個項(xiàng)目列表:
my_list = []
for i in other_list:
if condition_is_met:
my_list.append(i)
列表解析占地面積只有這個用例一的for循環(huán):
my_list = [i for i in other_list if condition_is_met]
這就是為什么它被稱為“列表理解”而不是“內(nèi)聯(lián) for 循環(huán)”——因?yàn)樗粍?chuàng)建列表。您可能使用for循環(huán)的其他事情,比如迭代一個數(shù)字,您不能直接使用列表理解來做。
對于您的特定問題,您正在嘗試k += 1在列表理解中使用。此操作不返回任何內(nèi)容 - 它只是修改變量k- 因此當(dāng) python 嘗試將其分配給列表項(xiàng)時,操作失敗。如果你想用 計數(shù)k,你應(yīng)該只使用一個常規(guī)for循環(huán):
for i in aa:
if i != 2:
k += 1
或使用列表理解來間接衡量您想要的內(nèi)容:
k += len([i for i in aa if i != 2])
在這里,我們用一個列表理解來構(gòu)建每一個元素的列表i中aa這樣i != 2,那么我們就在該列表中元素的個數(shù),并把它添加到k。由于這個操作實(shí)際上產(chǎn)生了一個自己的列表,所以代碼不會崩潰,整體效果是一樣的。如果您想在for循環(huán)中執(zhí)行更復(fù)雜的事情,則此解決方案并不總是可行的- 而且它的效率也稍低,因?yàn)榇私鉀Q方案實(shí)際上需要創(chuàng)建新列表,而這對您來說不是必需的試圖實(shí)現(xiàn)。
添加回答
舉報