【问题标题】:Is there a way to create a list that would work as a counter?有没有办法创建一个可以用作计数器的列表?
【发布时间】:2020-02-22 10:45:00
【问题描述】:

我正在尝试创建一个用作计数器的列表,例如每次发生事件时,都会在其中添加一个数字以跟踪它发生的频率。它或多或少可以作为列表的索引。

我是 python 新手,这就是为什么有些人可能会将我的代码视为意大利面条代码。

我的主类调用一个索引长度为 0-50 的数组类来创建它的对象。它还使用对象的值 0 启动计数器,如下所示。

def __init__(self):
    self._table = Array((0,), (50,))
    self._counter = 0

我运行这个方法,取keyobj 的值来填充数组对象。但是,当向方法enter_value() 输入参数时,它会给出错误提示TypeError: 'int' object is not subscriptable

def populate_test(self, key, obj):
    for i in range(len(self._table._array)):
        self._table.enter_value(self._counter, (key, obj))
        self._counter = self._counter + 1

这是 enter_value 方法。

def enter_value(self, index, value):
    for i in range(len(self._table._array)):
         ###Here's where the error occurs
         if (index[i] < self._low[i]) or (index[i] > self._high[i]):
             //Do something

据我所知,可下标对象是可以用作列表或字典的东西。我的错误是否因为index[i] 而发生,因为我的计数器是int 对象而不是实际上的列表?如果是这样的话,关于我关于这篇文章的问题,有没有办法让我创建一个可以作为更好的计数器的列表?

【问题讨论】:

  • “比如每次发生事件时,都会添加一个数字来跟踪它发生的频率” ...这是一个 XY 问题。您需要告诉我们您正在尝试解决的任务,而不是询问您认为如何解决它的问题。什么样的活动?需要计算什么,为什么?您想总体实现什么目标?
  • self.counter 在您的代码中是 int 。错误是由于 index[i] 传递给 enter_value(index= self.counter)

标签: python arrays list counter


【解决方案1】:

是的,您的错误发生是因为您的 self._counter 变量是 int

如果你想要一个列表作为计数器,你可以使用:

self._counter = [0]

每次你想增加计数器时,你可以这样做:

self._counter.append(self._counter[-1] + 1)

self._counter[-1] 是你的实际计数器值

【讨论】:

    【解决方案2】:

    由于您作为索引传递给 self._table.enter_value 的值是 self._counter,因此引发了错误,它是一个整数,而不是列表,因此不可下标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多