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

Я новичок в 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) 
  • «Требуется версия Python версии 2.7, которая не была найдена в реестре» при попытке установить netCDF4 на Windows 8
  • Pandon pandas: добавление столбца в сгруппированный DataFrame с цепочкой методов
  • Выполнение Python из php
  • Как импортировать папку lib внутри модулей
  • Dataframe Применить метод для возврата нескольких элементов (серий)
  • TypeError: initial_value должен быть unicode или None, а не str,
  • Использование raw-сокета в Python
  • Открытие соединения postgres в psycopg2 приводит к сбою python
  • Данные JSON преобразуются в модель django
  • Использование регулярного выражения для замены данных файла
  • путают о random_state в дереве решений scikit learn
  • Python - лучший язык программирования в мире.