python - 如何在python中删除和更改附加列表?
问题描述
我有两个类,并且我已经将一些项目附加到对象,但是如果匹配并删除不匹配的对象ve
,我需要更改这些项目。id
class Env:
def __init__(self):
self.ve = []
def add_new_ve(self, start_position, start_di, vel,id):
self.ve.append(V(start_position, start_di, vel,id))
self.ve.remove(id)
class V:
def __init__(self,start_position, start_di, vel,id):
self.id=id
self.position = start_position
self.direction = start_di
self.velocity = vel
但我收到了这个错误
self.ve.remove(id)
ValueError: list.remove(x): x not in list
解决方案
您需要将V
对象传递给self.ve.remove()
,而不是id
- 通知,它self.ve
是V
对象列表,而不是id
s 列表。创建一个没有对象的新列表会更简单(所有具有相同对象的对象都id
将被删除):
def add_new_ve(self, start_position, start_di, vel, id):
# remove old objects with the same id
self.ve = [x for x in self.ve if x.id != id]
# add new object with that id
self.ve.append(V(start_position, start_di, vel, id))
另一种选择是实现一个find()
方法,该方法返回一个V
给定它的对象id
,这就是您可以传递给的对象remove()
,前提是您还实现了__hash__
和__eq__
in V
。正如我所说,我的第一个解决方案更简单。
推荐阅读
- datatables - 仅在页面上初始化超过 1 个数据表时发生错误
- flask - 为什么 heroku 不能运行我的烧瓶应用程序。找不到属性应用程序然后输出错误代码 H10
- python - 虽然循环没有显示正确的输出
- asynchronous - 为什么 tokio::spawn 在 crossbeam_channel::select 旁边调用时会有延迟?
- python - 如何在 add_url_rule 烧瓶中使用参数
- python - 将txt转换为按列分隔的CSV
- python - rpy2 将包中的 R 符号转换为 Python 符号时发生冲突
- javascript - 带有坏字符的 Base64
- excel - 试图通过整个工作簿过滤特定的 ChartCategory.Name
- reactjs - 反应路由找不到匹配的页面