python - 通过变量从列表中删除项目
问题描述
基本上我在从列表中删除项目时遇到问题。我想通过一个变量来做到这一点,就像这样:
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
你们会推荐我什么?
解决方案
您从列表中随机选择了一个项目,然后将整个旧列表作为单个元素添加到新列表中。这将创建一个二维列表,其中不包含最外层列表中的任何字符串值。
调试此问题的最佳方法是在应用删除之前打印您的列表以查看其中包含的内容:
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
是一个线性操作,它可能会查看列表中的每个元素以找到要删除的元素。这可能看起来很傻,但是当您开始处理包含数千或数百万个项目的列表时,不必要地遍历列表会成为一个大问题。
尝试使用pop
andrandom.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)
推荐阅读
- git - Ubuntu 上的“无法连接到 github.com 端口 443:超时”
- spring-boot - 我可以配置 Zuul 代理以仅在用户通过身份验证的情况下对用户和代理请求进行身份验证吗?
- ios - React Native Firebase 推送通知崩溃报告问题
- copy - 如何从当前目录复制文件而不从子目录中获取文件?
- excel - Excel 宏大部分时间都在工作,但并非总是如此
- click - fireEvent.click() (form fireEvent) vs element.click() (来自 JSDOM)
- python - 错误: (-215:Assertion failed) !_src.empty() in function 'cvtColor' while deploying on heroku 虽然在本地服务器上工作正常
- kdb - 具有单个值和多个键的字典
- javascript - 在方法中过滤基于数组的对象的属性
- windows-10 - 运行python应用程序时如何解决Windows中的权限被拒绝错误?