Каждому элементу одного списка (массива) присвоить каждый элемент других списков (массивов)

Рейтинг: 0Ответов: 2Опубликовано: 27.03.2015

Запарился уже, никак не могу понять, как же сделать. Подскажите, пожалуйста.

Есть словарь, содержащий списки, (Python), например, вот содержит три таких списка:

{0: ['34', '35'], 1: ['green', 'blue', 'black'], 2: ['41', '42']}

Нужно каждому элементу одного списка присвоить каждый элемент других списков. На выходе должно быть так:

 - 34 green 41
 - 34 green 42
 - 34 blue 41
 - 34 blue 42
 - 34 black 41
 - 34 black 42
 - 35 green 41
 - 35 green 42
 - 35 blue 41
 - 35 blue 42
 - 35 black 41
 - 35 black 42

Количество списков и элементов в них произвольное.


Ну или то же самое на php. Есть массив, например:

$mass = array(0 => array('34', '35', '36', '37'), 1 => array('green', 'ble', 'black'), 2 => array('41', '42', '43'));

Ответы

▲ 1Принят

В стандартной библиотеке питона есть замечательный модуль itertools, который как раз умеет то, что вам нужно:

import itertools
d = {0: ['34', '35'], 1: ['green', 'blue', 'black'], 2: ['41', '42']}
for items in itertools.product(*d.values()):
    print ' '.join(items)
▲ 1

Простой вариант для понимания:

d = {0: ['34', '35'], 1: ['green', 'blue', 'black'], 2: ['41', '42']};

for a in d[0]:
  for b in d[1]:
    for c in d[2]:
      print(str(a) + " " + str(b) + " " + str(c))

Ну и как-то так на php. =)