Подтвердить что ты не робот

Python возвращает объект <itertools.combinations на 0x10049b470> `- Как я могу получить к нему доступ?

У меня есть эта простая часть кода, которая возвращает то, что в названии. Почему массив просто не печатает? Это не просто проблема itertools, я также заметил это для другого кода, где он просто вернет местоположение объекта.

Вот код. Я запускаю 2.7.1, распределенное предложение (pylab) - используя его для класса.

import itertools

number = [53, 64, 68, 71, 77, 82, 85]

print itertools.combinations(number, 4)
4b9b3361

Ответ 1

Он не печатает простой список, потому что возвращенный объект не является списком. Примените к нему функцию list, если вам действительно нужен список.

print list(itertools.combinations(number, 4))

itertools.combinations возвращает итератор. Итератор - это то, к чему вы можете применить for on. Обычно элементы итератора вычисляются, как только вы его извлекаете, поэтому нет штрафа за копирование всего содержимого в память, в отличие от list.

Ответ 2

Попробуйте следующее:

for x in itertools.combinations(number, 4):
   print x

Или короче:

results = [x for x in itertools.combinations(number, 4) ]

В принципе, все функции модуля itertools возвращают этот тип объекта. Идея состоит в том, что вместо того, чтобы вычислять список ответов спереди, они возвращают итерируемый объект, который "знает", как вычислять ответы, но не делает этого, если "не спросил". Таким образом, для вычислительных элементов нет значительных затрат на фронт. См. Также это очень хорошее введение в генераторы.