python中对象包含几个部分_Python中,扩展一个list对象以包含每个元素的权重

我在写更完整的答案收藏.abc我很可能会叫你这样做的:

地图键:值对(这里你的“重量”是你的价值)这是预售订单。在

只需执行from collections import OrderedDict并使用它而不是自定义列表-将“mydict[element]=weight”替换为“append(element)”

如果你真的需要一个类似对象的自定义列表,请继续阅读:

我的最初想法—一种真正创建具有自定义行为/元素的列表式对象的方法。在

从技术上讲,您可以从list继承,但是由于

关于Python如何实现

一个列表内置方法,你最好实现一个

collections.abc.MutableSequence子类,而不是list的子类。在

(nbpython2.x它只是collections.MutableSequence-python3添加了“abc”名称空间。)

如果您查看这里的文档-https://docs.python.org/dev/library/collections.abc.html,您将看到您可以使用一个列表状的对象,您只需实现:

__getitem__, __setitem__, __delitem__, __len__, insert方法和Python将为您处理其余的问题。在

而且,您可以使用一个内部Python列表以聚合模式保存数据,并让它处理您对列表式迭代的所有访问。在这个列表中,只需为所需的每个数据元素保留两个元组或两个元素列表—第一个元素是元素,第二个元素是所需的权重。然后,只需添加两个额外的方法,允许您显式地获取/重置权重参数。在# Python 2/3 compatibility snippet:

try:

from collections import MutableSequence

except ImportError:

from collections.abc import MutableSequence

class WList(MutableSequence):

def __init__(self, *args, **kw):

self.data = list(*args, **kw)

def __getitem__(self, index):

return self.data[index]

def __setitem__(self, index, value):

if len(value) != 2:

raise TypeError ("You have to pass a value and a weight")

self.data[index] = value

def __delitem__(self, index):

del self.data[index]

def __len__(self):

return len(self.data)

def insert(self, index, value):

if len(value) !=2:

raise TypeError ("You have to pass a value and a weight")

self.data.insert(index, value)

def set_weight(self, index, weight):

self.data[index] = (self.data[index][0], weight)

def __repr__(self):

return "Wlist(%r)" % self.data

但是……事实上,考虑到你的问题,这看起来太过火了-你可能只需要一个有序的dict。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值