0

我想创建一个循环,如果满足某个条件则创建一个对象,然后将其添加到列表中。但是,我不确定如何唯一地命名这些对象,以便以后可以使用/引用它们。例如这样的:

favNumbers = []

numbers = [6, 21, 5, 22]

class favNumber(object):
    def __init__(self, value):
        self.value = value

for i in numbers:
    if i % 2 == 0:
        unique_name_for_object = favNumber(i)
        favNumbers.append(unique_name_for_object)

我将如何给favNumber对象一个唯一的名称?

我正在考虑以某种方式将它们命名为 number1、number2、number3 ......但我认为动态命名它们是一个坏主意。

有没有办法在不动态命名的情况下做到这一点?这似乎是不可能的,但我不确定我还能如何完成它。

4

2 回答 2

1

无需命名实例。试试这个

favNumbers = []   
numbers = [6, 21, 5, 22]


class favNumber(object):
    def __init__(self, value):
        self.value = value


for i in numbers:
    if i % 2 == 0:
        favNumbers.append( favNumber(i) )

现在,favNumbers是所有已创建实例的列表。如果要获取value每个实例,只需键入

for fn in favNumbers:
    print(fn.value)
于 2017-08-17T17:23:08.170 回答
0

如果您只是想生成一个列表,您可以使用列表推导

favNumbers = [favNumber(i) for i in numbers if n % 2 == 0]

最后一个表达式 ( if n % n == 0) 充当过滤器。要访问这些值,您可以使用索引(例如favNumbers[0],第一项),或者像使用numbers.


正如有人在评论中指出的那样,{}是 adict并且不能附加到。但是,您可以在给定键的情况下插入项目(也可以是整数i,尽管当键是连续的非负整数时使用列表通常更有意义)。

for i in numbers:
  if n % 2 == 0:
    favNumbers[i] = favNumber(i)

也可以通过字典理解来完成:

favNumbers = { i : favNumber(i) for i in numbers if n % n == 0 }

如果您提供其他上下文,我会更新答案。

于 2017-08-17T17:37:19.467 回答