выбирать комбинации из нескольких списков

Я новичок в python, и я изо всех сил пытаюсь сформировать комбинацию из нескольких списков. Итак, у меня есть три (и возможно больше), которые выглядят так:

uk_rock_stars=[1,2,3,4,5,6,7,8,9] uk_pop_stars=[10,11,12,13,1,4,6,22,81] us_stars=[22,34,44,7,33,99,22,77,99] . . 

со всеми списками одинаковой длины. Теперь я хотел бы создать их список комбинаций, причем N – общее количество списков выше. Я ищу результат, похожий на:

 comb=[(1,10,22),(1,10,34),(1,10,44)...etc (all combinations)....] 

так что каждая комбинация, скажем, (1,10,22), имеет ту же длину, что и количество исходных списков (в этом случае 3)

2 Solutions collect form web for “выбирать комбинации из нескольких списков”

Прочитайте этот http://docs.python.org/2/library/itertools.html#itertools.product , он объясняет все.

itertools – это пакет, который имеет кучу полезных функций для итерации над коллекциями. Одна полезная функция – это функция product которая создает генератор, который будет перебирать декартово произведение любого количества итерируемых коллекций, которые вы ему даете.

Результат itertools.product не является списком, это генератор. Генератор питона похож на сопрограмму на других языках. Это означает, что он будет вычислять ваши комбинации по мере необходимости. Если вы вычислите произведение трех итераций, каждый из которых имеет размер 100, но вы используете только первые 10 или около того, то itertools.product будет вычислять только 10 комбинаций вместо вычисления всех комбинаций 100 ^ 3.

Если вы действительно хотите, чтобы объект списка вместо генератора (возможно, вы хотите вычислить фрагменты или что-то еще), вызовите функцию list и передайте объект-генератор в качестве аргумента.

Следующий код создает все комбинации и печатает результаты.

Код:

 import itertools uk_rock_stars=[1,2,3,4,5,6,7,8,9] uk_pop_stars=[10,11,12,13,1,4,6,22,81] us_stars=[22,34,44,7,33,99,22,77,99] for combination in itertools.product(uk_rock_stars, uk_pop_stars, us_stars): print combination 

Выходы:

 (1, 10, 22) (1, 10, 34) (1, 10, 44) (1, 10, 7) (1, 10, 33) (1, 10, 99) (1, 10, 22) (1, 10, 77) (1, 10, 99) (1, 11, 22) (1, 11, 34) (1, 11, 44) (1, 11, 7) (1, 11, 33) (1, 11, 99) (1, 11, 22) (1, 11, 77) (1, 11, 99) ... etc. 

Я думаю, что это то, что вы ищете:

 import itertools comb = itertools.product(uk_rock_stars, uk_pop_stars, us_stars) 

Это даст вам объект итератора, который может быть или не быть тем, что вы хотите. Чтобы преобразовать его в обычный список, просто используйте это:

 comb = list(comb) 
  • Дескрипторы: Превосходство доступа к атрибутам через __getattribute () __
  • pip сломан, переустановка не работает. EC2
  • Создание фрейма данных Python Pandas
  • Плохой дескриптор файла - Heroku Foreman
  • Ошибка Python - объект int не имеет атрибута
  • Установка Numpy: Visual C ++ 9 не найден
  • сохраняя только уникальные экземпляры списков, единственной разницей которых является порядок
  • ValueError: невозможно преобразовать строку в float: '1'
  • Python - лучший язык программирования в мире.