首页 > 解决方案 > 通过变量从列表中删除项目

问题描述

基本上我在从列表中删除项目时遇到问题。我想通过一个变量来做到这一点,就像这样:

my_list = ["cat","dog","duck","horse","snake"]
import random
animal=(random.choice(my_list))
new_list = []
new_list.append(my_list)
new_list.remove(animal)
print(new_list)

我得到这个: ValueError : list.remove(x) : x not in list

你们会推荐我什么?

标签: pythonpython-3.xlist

解决方案


您从列表中随机选择了一个项目,然后将整个旧列表作为单个元素添加到新列表中。这将创建一个二维列表,其中不包含最外层列表中的任何字符串值。

调试此问题的最佳方法是在应用删除之前打印您的列表以查看其中包含的内容:

print(new_list) # => [['cat', 'dog', 'duck', 'horse', 'snake']]

你注意到额外的东西了[[]]吗?那是一个嵌套列表。

很可能,您的意图是复制列表(在此处使用 slice 运算符完成):

my_list = ["cat","dog","duck","horse","snake"]
import random
animal=(random.choice(my_list))
new_list = my_list[:]
new_list.remove(animal)
print(new_list)

除此之外,包含空格、删除不必要的括号并将导入放在文件顶部是一个很好的做法。

最后,remove是一个线性操作,它可能会查看列表中的每个元素以找到要删除的元素。这可能看起来很傻,但是当您开始处理包含数千或数百万个项目的列表时,不必要地遍历列表会成为一个大问题。

尝试使用popandrandom.randint选择一个索引并将其从列表中一次性删除(移动列表成员以填补空白仍然会受到惩罚;从列表中间删除并不理想):

import random

my_list = ["cat", "dog", "duck", "horse", "snake"]
new_list = my_list[:]
new_list.pop(random.randint(0, len(my_list) - 1))
print(new_list)

推荐阅读