为什么我的函数返回这些值?

2024-05-23 20:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,伙计们,女孩们,这里完全没有人,但我一辈子都搞不懂为什么这个函数不能把40以下的值都排序出来。我真的很惊讶,因为这是一个如此基本的任务,即使对我来说,但我已经盯着它看了一段时间了,搞不懂它

def sort(list):
    list.sort()
    for num in list:
        if num < 40:
            list.remove(num)

return list

print (sort([-31, 0, 5, 76, 12, 32, 4, 88]))

Output : [0, 5, 32, 76, 88]


Tags: 函数inforoutputreturnif排序def
1条回答
网友
1楼 · 发布于 2024-05-23 20:49:58

你的功能是正确地排序值。 问题是,在迭代过程中删除项时,会弄乱列表迭代器。循环浏览列表中的元素时,不能从列表中删除元素

当你移除一个元素时,你不会重置迭代器,在幕后,它使用一个索引来迭代,所以当你移除这个项目时,你会将下一个项目向后移动一个索引,然后告诉循环向前移动,跳过几个项目

[-31,0,5,76,12,32,4,88]
# first iteration: i = 0, removes -31
[0,5,76,12,32,4,88]
# second iteration: i = 1, removes 5

看到发生什么了吗? 另一种方法是使用一段时间:

while len(list) > 0 and list[0] < 40:
    list.pop(0)

另一种方法是,由于您对列表进行了排序,因此可以找到40以下较大数字的索引,然后一次性删除其前面的所有元素:

max_b40_index = None
for (e, e_index) in enumerate(list):
    if e >= 40: break
    max_b40_index = e_index
return list[:max_b40_index+1]

list[:n]代码返回从索引n到列表末尾的子集

哦,一定要检查一下max_b40_index不是无。你可能有一个没有任何数字低于40的列表

相关问题 更多 >