5 回答
TA贡献1828条经验 获得超4个赞
您可以使用条件 列表理解来执行以下操作:
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贡献1806条经验 获得超8个赞
当您执行 a 时pop(),您正在通过缩短列表来更改列表。如果您想进行调用pop(),我建议以相反的顺序解析列表,从末尾开始,然后向开头进行。
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)
这应该会让你的实际错误消失。但这并不是解决问题的最佳方法。我仍然建议以相反的顺序处理列表。
TA贡献1993条经验 获得超5个赞
您可以使用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贡献1852条经验 获得超7个赞
一种带有 while 且不创建新列表的解决方案
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贡献1802条经验 获得超6个赞
虽然这不是最好的方法,但它可能是您正在寻找的修复方法
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
添加回答
举报