Именование объектов, созданных в цикле
Я хочу создать цикл, который создает объект, если выполняется определенное условие, а затем добавить его в список. Тем не менее, я не уверен, как уникально назвать эти объекты, чтобы они могли использоваться / ссылаться позже. Например что-то вроде этого:
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 }
Я обновлю ответ, если вы предоставите дополнительный контекст.