#python #list
Вопрос:
У меня есть понимание вложенного списка следующим образом:
self.Item = [[Object(x, y) for y in range(3)] for x in range(3)]
Теперь мне нужно сделать то же самое, но у объекта есть третий параметр: Index (который является просто int 0-9, последовательно).
self.Item = [[Object(x, y, index) for y in range(3)] for x in range(3)]
Решения, которые я нашел, использовали enumerated() , но мне было трудно реализовать их с помощью двух списков.
Комментарии:
1. Перечислять оба и умножать вместе?
2. Я устал от этого, но это дает странный шаблон вещей с тем же индексом из-за нулевого свойства продукта
3. Вы можете выбрать начальный номер до
enumerate
из.
Ответ №1:
Попробуйте это вместо:
z=0
L = []
for x in range(3):
for y in range(3):
L.append(Object(x,y,z))
z =1
Лично для подобных случаев использования я склонен находить itertools очень полезным для использования вместо вложенных циклов for . Вы можете добавить больше элементов в свой itertools.product
список, не беспокоясь о кошмарно вложенных циклах.
import itertools
L=[]
z=0
for X in itertools.product(range(3),range(3)):
L.append(Object(X[0],X[1],z))
z =1
Я просто не стал бы делать то, что у вас есть выше. Разделите свой код и сделайте его в 100 раз более читаемым и отлаживаемым в будущем. Подобный код кажется забавным и pythonic, но это ужасная идея.
Комментарии:
1. Да, это имеет смысл, спасибо! Трудно сопротивляться пониманию списка
Ответ №2:
Использование бесконечного итератора:
from itertools import count
index = count()
self.Item = [[Object(x, y, next(index)) for y in range(3)] for x in range(3)]