从列表中删除最小的整数

Remove smallest int from a list

我想从此列表中删除所有“1”,但它始终保留最后一个。

userlist = [1, 1, 1, 2, 1, 4, 1, 5, 1]

smallnumber = min(userlist)
[userlist.remove(x) for x in userlist if x == smallnumber] 

print(userlist)

一个更优雅的解决方案是:

userlist_new = [x for x in userlist if x != min(userlist)]

这个有一些答案,但是你需要看看你错在哪里:

[userlist.remove(x) for x in userlist if x == smallnumber] 

你在列表理解中使用 list.remove,这是这样写的:

new_list = []
for x in userlist:
   if x == smallnumber:
       new_list.append(userlist.remove(x))

如你所见list.remove return什么都没有,所以new_list会被None填满,而userlist会被清除数

我会添加另一个解决方案:

list(filter((smallnumber ).__ne__, userlist))

[userlist.remove(x) for x in userlist if x == smallnumber]

您代码中的这一行等同于以下内容。 * 请注意我添加的 print(x) 是为了向您展示要点

for x in userlist:
    print(x)
    if x == smallnumber:
        userlist.remove(x)

这里的问题是您试图遍历一个对象,同时从列表中删除该对象。这搞乱了 python 遍历循环的方式。从上面的打印你可以看到 python 不会因此遍历所有元素。

所以你可能应该使用一些其他的逻辑。其他答案中已经提出了很少的建议。另一种方法是使用过滤器

filtered_list = list(filter(lambda x: x!=smallnumber, userlist))

如果你想改变原来的自己。您可以使用以下逻辑

for _ in range(userlist.count(smallnumber)):
    userlist.remove(smallnumber)