我是靠谱客的博主 乐观小笼包,最近开发中收集的这篇文章主要介绍python集合支持索引吗_Python中的可索引弱有序集合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我想知道是否有一种简单的方法在Python中构建可索引弱有序集。我试图自己创建一个。以下是我想到的:

"""

An indexable, ordered set of objects, which are held by weak reference.

"""

from nose.tools import *

import blist

import weakref

class WeakOrderedSet(blist.weaksortedset):

"""

A blist.weaksortedset whose key is the insertion order.

"""

def __init__(self, iterable=()):

self.insertion_order = weakref.WeakKeyDictionary() # value_type to int

self.last_key = 0

super().__init__(key=self.insertion_order.__getitem__)

for item in iterable:

self.add(item)

def __delitem__(self, index):

values = super().__getitem__(index)

super().__delitem__(index)

if not isinstance(index, slice):

# values is just one element

values = [values]

for value in values:

if value not in self:

del self.insertion_order[value]

def add(self, value):

# Choose a key so that value is on the end.

if value not in self.insertion_order:

key = self.last_key

self.last_key += 1

self.insertion_order[value] = key

super().add(value)

def discard(self, value):

super().discard(value)

if value not in self:

del self.insertion_order[value]

def remove(self, value):

super().remove(value)

if value not in self:

del self.insertion_order[value]

def pop(self, *args, **kwargs):

value = super().pop(*args, **kwargs)

if value not in self:

del self.insertion_order[value]

def clear(self):

super().clear()

self.insertion_order.clear()

def update(self, *args):

for arg in args:

for item in arg:

self.add(item)

if __name__ == '__main__':

class Dummy:

def __init__(self, value):

self.value = value

x = [Dummy(i) for i in range(10)]

w = WeakOrderedSet(reversed(x))

del w[2:8]

assert_equals([9,8,1,0], [i.value for i in w])

del w[0]

assert_equals([8,1,0], [i.value for i in w])

del x

assert_equals([], [i.value for i in w])有没有更简单的方法来做到这一点?

最后

以上就是乐观小笼包为你收集整理的python集合支持索引吗_Python中的可索引弱有序集合的全部内容,希望文章能够帮你解决python集合支持索引吗_Python中的可索引弱有序集合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部