从列表中删除最小的整数
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)
我想从此列表中删除所有“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)