为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2023-08-22 17:52:20
L=[10,19,20,30,8,11,9]i=0while i==0:    while L[i]<=12:        i+=1    else:        L.pop(i)        i=0您好,我想从列表中删除大于 12 的值。我得到了我想要的列表,但我也收到一条错误消息,显示“列表索引超出范围”,即使我在循环结束时使 i=0 。我该如何修复它?
查看完整描述

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将会和以前一样。


查看完整回答
反对 回复 2023-08-22
?
慕森卡

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)

这应该会让你的实际错误消失。但这并不是解决问题的最佳方法。我仍然建议以相反的顺序处理列表。


查看完整回答
反对 回复 2023-08-22
?
ibeautiful

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)


查看完整回答
反对 回复 2023-08-22
?
慕姐4208626

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


查看完整回答
反对 回复 2023-08-22
?
呼啦一阵风

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


查看完整回答
反对 回复 2023-08-22
  • 5 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信