На всякий случай, если вам нужна максимальная эффективность при больших list
с, альтернативой пониманию list
в этом случае является использование map
+ operator.attrgetter
. Вы можете зациклить map
напрямую:
from operator import attrgetter
for X in map(attrgetter('X'), randomList):
, который не требует временных list
(map
лениво извлекает элементы по требованию в Python 3), или, если вам действительно нужен list
, просто оберните в конструктор list
или используйте распаковку list
для запуска это с нетерпением:
Xs = list(map(attrgetter('X'), randomList))
# or
Xs = [*map(attrgetter('X'), randomList)]
Для небольших входных данных list
с, это будет медленнее, чем понимание list
(у него немного больше накладных расходов на настройку), но для средних и больших входов это будет быстрее (накладные расходы на элемент немного ниже, поскольку не требует выполнения байт-кода для каждого элемента).
Для ясности, все равно придется перебирать list
. Не существует волшебного способа получить атрибуты каждого элемента в list
без зацикливания на нем; вы могли бы пойти на крайние меры, чтобы получить представления list
, которые беспрепятственно читают атрибут из базового list
, но если бы вы обращались к каждому элементу этого представления, это было бы эквивалентно требуемому циклу в работе.