Именование объектов, созданных в цикле

Я хочу создать цикл, который создает объект, если выполняется определенное условие, а затем добавить его в список. Тем не менее, я не уверен, как уникально назвать эти объекты, чтобы они могли использоваться / ссылаться позже. Например что-то вроде этого:

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 объекты уникальное имя?

Я думал о том, чтобы как-то назвать их номер 1, номер 2, номер 3... но я думаю, что динамическое присвоение им имен было бы плохой идеей.

Есть ли способ сделать это без динамического именования их? Кажется, что это было бы невозможно, но я не уверен, как еще я мог бы сделать это.

2 ответа

Нет необходимости называть экземпляры. Просто попробуйте это

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)

Если вы просто хотите создать список, вы можете использовать понимание списка:

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

Последнее выражение (if n % n == 0) действует как фильтр. Для доступа к значениям вы используете индекс (например, favNumbers[0] для первого элемента), или прокрутите список, как вы сделали с numbers,


Как кто-то указал в комментариях, {} это dict и не может быть добавлен к. Тем не менее, вы можете вставлять элементы по ключу (который также может быть целым числом 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 }

Я обновлю ответ, если вы предоставите дополнительный контекст.

Другие вопросы по тегам