python - 如何为 python 列表的每个元素实现一个计数器?

标签 python list counter

使用 Python 3.4

我有一个可行的方法,但我认为可能还有更好的方法。 我想要一个列表,其方法 expand() 从列表中选择一个随机元素,但每次选择该元素时,计数器都会递增。我尝试子类化 str 以便能够添加属性,但它没有用。

我的主要问题是表达式 random.randint(0,len(self)-1) 和使用局部变量似乎不太符合 Pythonic。在我添加计数器之前,我可以输入 random.choice(self)

class clauses(list):
    def __init__(self):
        self.uses = []

    def __setitem__(self,key,value):
        self.uses[key]=value
        super().__setitem__(self,key,value)

    def __delitem__(self,key):
        del(self.uses[key])
        super().__delitem__(key)

    def append(self,value):
        self.uses.append(0)
        super().append(value)

    def extend(self,sequence):
        for x in sequence:
            self.uses.append(0)
            super().append(x)

    def expand(self):

        n = random.randint(0,len(self)-1)

        self.uses[n] += 1
        return(self[n])

最佳答案

假设列表中没有重复的条目,初始化一个空字典和您的列表应该可以解决这个问题。

在列表中添加元素时,也可以通过myDict[element]=0将其添加到字典中,其中myDict是初始化的字典,element 是要添加到列表中的项目。

然后,当项目被选中时,您可以简单地执行:myDict[element]+=1

在处理重复条目的实例时,您可以创建一个字典字典,其中字典中的每个 key 都是一个单词,嵌套字典 keys 用于例如,每个单词都是重复单词的索引位置(当然,这些值是实际计数)。然而,这确实增加了相当大的复杂性,因为当您从列表中删除一个项目时,您还需要更新索引位置。这个嵌套数据结构会像这样:{ word1: {position1: count1}, word2: {position1: count1, position 2: count2}....}

关于python - 如何为 python 列表的每个元素实现一个计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011270/

相关文章:

python - Python 中的多处理池 - 仅使用单个 CPU

python - 如何在 python 中的某些点将列表拆分为更小的列表?

java - 跟踪数组中有多少个数字和计数器

JavaScript 翻转计数器

python - 绘制一组 pandas 数据框

python - 我将如何使用 XGBoost 构建自己的评估指标来最大限度地减少高度不平衡类的测试错误?

python - Pandas(python)中带有字典的部分 map ,返回属性错误

list - 根据多个包含过滤列表

java - 从文件中打印偶数行和奇数行

javascript - 为什么我的 $digest() 迭代次数达到了?如何跟踪递归脚本的事件?