gpt4 book ai didi

用于在元组中保存计数的Python数据结构?

转载 作者:行者123 更新时间:2023-12-01 01:24:55 26 4
gpt4 key购买 nike

我有一个像这样的人物对象列表...

class person:
monthlyTaskCount = []
def __init__(self, name):
self.name = name

bob = person("Bob Smith")
sam = person("Sam Jones")
amy = person("Amy Owen")

people = [bob,sam,amy]

我正在与任务列表进行比较,以计算和跟踪他们每月执行的任务数量......

for x in taskList: #contains x.personName, x.taskName, x.monthPerformed
for p in people:
if x.personName == p.name:
#append to p.monthlyTaskCount in some way

我陷入了困境,因为我无法想象一种适当的方法来跟踪逐月数据,并最终得到 p.amy.monthlyTaskCount 类似的结果...

[11/2018:23, 12/2018:12, 1/2019:19, 2/2019:34]

(显示 2018 年 11 月等完成的 23 项任务)

我只是迷失在寻找一种优雅的方式来存储这种格式的数据 - 例如简单地将值附加到列表中会导致每月出现重复的条目,然后我必须随后清理这些条目,因此我希望有人可以推荐一种可以解决问题的数据结构。

最佳答案

我怀疑如果您使用字典来存储更多数据,这个问题会更容易解决。例如,不要输入 people在列表中,但它们在按其名称键入的字典中,您可以立即查找相应的 person实例而不是每次都需要遍历列表。

类似地,每月计数可能应该是另一个字典,或者可能是像 collections.Counter 这样的字典子类型。 (专门为计数而设计)。

您设置 monthlyTaskCount 的方式还存在另一个问题在你的类中:所有实例将共享相同的列表,因为它是作为类变量创建的。您可能应该将其创建移至 __init__方法如此各person获得自己的副本。

无论如何,这是我的建议:

import collections

class person:
def __init__(self, name):
self.name = name
monthlyTaskCount = collections.Counter()

bob = person("Bob Smith")
sam = person("Sam Jones")
amy = person("Amy Owen")

people = {p.name: p for p in [bob, sam, amy]}

通过改进的数据结构,您的记账变得容易:

for x in taskList: #contains x.personName, x.taskName, x.monthPerformed
people[x.personName].monthlyTaskCount[x.monthPerformed] += 1

关于用于在元组中保存计数的Python数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com