5 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個贊
您可以使用條件?列表理解來執(zhí)行以下操作:
l=[each?for?each?in?L?if?each<=12]
l
將:
[10,?8,?11,?9]
如果你不喜歡列表理解,你可以這樣做:
l=[] for?each?in?L: ????if?each<=12: ????????l.append(each)
l
將會和以前一樣。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個贊
當(dāng)您執(zhí)行 a 時pop(),您正在通過縮短列表來更改列表。如果您想進(jìn)行調(diào)用pop(),我建議以相反的順序解析列表,從末尾開始,然后向開頭進(jìn)行。
for i in range(len(L) - 1, -1, -1):
if L[i] > 12:
L.pop(i)
但是,要直接回答您的問題,請更改代碼以替換:
L.pop(i)
和:
if i < len(L):
L.pop(i)
這應(yīng)該會讓你的實(shí)際錯誤消失。但這并不是解決問題的最佳方法。我仍然建議以相反的順序處理列表。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個贊
您可以使用filter:
L=[10,19,20,30,8,11,9]
#For python 2
L1 = filter(lambda x: x < 12, L)
#For python 3, wrap filter with list
L1 = list(filter(lambda x: x < 12, L))
print (L1)

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個贊
一種帶有 while 且不創(chuàng)建新列表的解決方案
L=[10,19,20,30,8,11,9]
i=0
while i < len(L):
if L[i] > 12:
L.pop(i)
else:
i += 1

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個贊
雖然這不是最好的方法,但它可能是您正在尋找的修復(fù)方法
L=[10,19,20,30,8,11,9]
i=0
while i==0:
while L[i]<=12:
if i==len(L)-1:
break
i+=1
else:
L.pop(i)
i=0
添加回答
舉報