猿问

从列表中删除所有大于所需数量的值

L=[10,19,20,30,8,11,9]

i=0

while i==0:

    while L[i]<=12:

        i+=1

    else:

        L.pop(i)

        i=0

您好,我想从列表中删除大于 12 的值。我得到了我想要的列表,但我也收到一条错误消息,显示“列表索引超出范围”,即使我在循环结束时使 i=0 。我该如何修复它?


墨色风雨
浏览 248回答 5
5回答

明月笑刀无情

您可以使用条件 列表理解来执行以下操作: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将会和以前一样。

慕森卡

当您执行 a 时pop(),您正在通过缩短列表来更改列表。如果您想进行调用pop(),我建议以相反的顺序解析列表,从末尾开始,然后向开头进行。for i in range(len(L) - 1, -1, -1):&nbsp; &nbsp; if L[i] > 12:&nbsp; &nbsp; &nbsp; &nbsp; L.pop(i)但是,要直接回答您的问题,请更改代码以替换:L.pop(i)和:if i < len(L):&nbsp; &nbsp; L.pop(i)这应该会让你的实际错误消失。但这并不是解决问题的最佳方法。我仍然建议以相反的顺序处理列表。

ibeautiful

您可以使用filter:L=[10,19,20,30,8,11,9]#For python 2L1 = filter(lambda x: x < 12, L)#For python 3, wrap filter with listL1 = list(filter(lambda x: x < 12, L))print (L1)

慕姐4208626

一种带有 while 且不创建新列表的解决方案L=[10,19,20,30,8,11,9]i=0while i < len(L):&nbsp; &nbsp; if L[i] > 12:&nbsp; &nbsp; &nbsp; &nbsp; L.pop(i)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; i += 1

呼啦一阵风

虽然这不是最好的方法,但它可能是您正在寻找的修复方法L=[10,19,20,30,8,11,9]i=0while i==0:&nbsp; while L[i]<=12:&nbsp; &nbsp; if i==len(L)-1:&nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; i+=1&nbsp; else:&nbsp; &nbsp; L.pop(i)&nbsp; &nbsp; i=0
随时随地看视频慕课网APP

相关分类

Python
我要回答