Самый эффективный способ создать все возможные комбинации из четырех списков в Python? - PullRequest
5 голосов
/ 06 марта 2010

У меня есть четыре разных списка.headers, descriptions, short_descriptions и misc.Я хочу объединить их во все возможные способы печати:

header\n
description\n
short_description\n
misc

, как если бы у меня было (я пропускаю short_description и misc в этом примере по понятным причинам)

headers = ['Hello there', 'Hi there!']
description = ['I like pie', 'Ho ho ho']
...

Я хочу, чтобы это распечатывалось как:

Hello there
I like pie
...

Hello there
Ho ho ho
...

Hi there!
I like pie
...

Hi there!
Ho ho ho
...

Что бы вы назвали лучшим / самым чистым / наиболее эффективным способом сделать это?for - единственный путь?

Ответы [ 5 ]

10 голосов
/ 06 марта 2010
4 голосов
/ 06 марта 2010
import itertools

headers = ['Hello there', 'Hi there!']
description = ['I like pie', 'Ho ho ho']

for p in itertools.product(headers,description):
    print('\n'.join(p)+'\n')
3 голосов
/ 06 марта 2010

Выражение-генератор для этого:

for h, d in ((h,d) for h in headers for d in description):
    print h
    print d
0 голосов
/ 12 марта 2010
>>> h = 'h1 h2 h3'.split()
>>> h
['h1', 'h2', 'h3']
>>> d = 'd1 d2'.split()
>>> s = 's1 s2 s3'.split()
>>> lists = [h, d, s]
>>> from itertools import product
>>> for hds in product(*lists):
    print(', '.join(hds))

h1, d1, s1
h1, d1, s2
h1, d1, s3
h1, d2, s1
h1, d2, s2
h1, d2, s3
h2, d1, s1
h2, d1, s2
h2, d1, s3
h2, d2, s1
h2, d2, s2
h2, d2, s3
h3, d1, s1
h3, d1, s2
h3, d1, s3
h3, d2, s1
h3, d2, s2
h3, d2, s3
>>> 
0 голосов
/ 06 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...