【问题标题】:How to assign a class object to a item in a list? (python)如何将类对象分配给列表中的项目? (Python)
【发布时间】:2013-10-10 22:15:32
【问题描述】:

我定义了一个包含 3 个对象的类:

class abc():
     __slots___ = ('1','2',3')

从这里,我制作了一个包含大约一千个元素的列表:

lst = [[abc,dfg,9292],[ksdj,lkjsd,9239],...]

每个元素内的第三个元素始终是一个数字。我想将类中名为 3 的对象分配给第三个元素,以便对列表进行排序。

为了澄清一些误解,对象 3 实际上是数量。因此,每个元素中的第三个元素被认为是一个量。

【问题讨论】:

  • 这是什么语言?
  • 在我看来像 python...@steve 如果我错了请纠正我。
  • 你班上叫 3 的对象是什么?你不能有这样的变量名。你能解释一下“从这里开始,我列出了一个包含大约一千个元素的列表”是什么意思吗?我真的不明白你写了什么
  • 对于__slots__ newbs(像我一样)stackoverflow.com/questions/472000/python-slots
  • @steve 您不能直接对列表进行排序有什么特别的原因吗?我不明白你为什么要在这里制作对象......

标签: python list class sorting


【解决方案1】:

目前尚不清楚您是在尝试对列表进行排序、从列表中的元素创建 abc 的实例,还是完全不同。

假设您想按每个子列表的第三个元素对列表进行排序:

lst.sort(key = lambda x: x[2])

会对您的列表进行适当的排序。

如果您想从列表中的每个元素创建abc 类型的对象,您需要弄清楚您对每个列表元素中的数据做了什么。如果您只是想将其存储为实例变量,则可以执行以下操作:

class ABC():
    __slots__ = ('a', 'b', 'c')
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

obj_list = [ABC(*x) for x in lst]

如果这是你想要的,你可以对这个生成的对象列表进行排序。

【讨论】:

  • OP 也可能希望查看collections.namedtuple - 但不清楚他们在追求什么
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 2020-10-08
  • 2012-07-29
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
相关资源
最近更新 更多