Объединить элементы в два списка разной длины - PullRequest
0 голосов
/ 27 июня 2018

(Я уверен, что на это где-то был дан ответ, но я действительно не мог найти правильный вопрос. Возможно, я не знаю правильный глагол для этого упражнения?)

У меня есть два списка:

prefix = ['A', 'B', 'C']
suffix = ['a', 'b']

И я хочу получить это:

output = ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']

Мне известен метод zip, который останавливается на самой короткой длине среди списков, к которым присоединяются:

output_wrong = [p+' '+s for p,s in zip(prefix,suffix)]

Так какой же самый питонский способ сделать это?

EDIT:

Хотя большинство ответов предпочитают itertools.product, я вместо этого предпочитаю следующее:

output = [i + ' ' + j for i in prefix for j in suffix]

поскольку он не вводит новый пакет, каким бы базовым он ни был (хорошо, я не знаю, какой путь быстрее, и это может быть вопросом личных предпочтений).

Ответы [ 7 ]

0 голосов
/ 27 июня 2018

Просто используйте list comprehension:

prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
output = [i+" "+j for i in prefix for j in suffix]
print(output)

Выход:

['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
0 голосов
/ 27 июня 2018
from itertools import product
map(' '.join, product(prefix, suffix))
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
0 голосов
/ 27 июня 2018

Использование itertools.product:

import itertools

prefix = ['A', 'B', 'C']
suffix = ['a', 'b']

print([f'{x} {y}' for x, y in itertools.product(prefix, suffix)])
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
0 голосов
/ 27 июня 2018

Использование product,

In [33]: from itertools import product

In [34]: map(lambda x:' '.join(x),product(prefix,suffix))
Out[34]: ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
0 голосов
/ 27 июня 2018

Использование списка понимания

prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
result = [val+" "+val2 for val in prefix for val2 in suffix ]
print(result)

OUTPUT

['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
0 голосов
/ 27 июня 2018

Это называется декартовым произведением:

[p + ' ' + s for p, s in itertools.product(prefix, suffix)]
0 голосов
/ 27 июня 2018

Использование itertools.product и понимание списка

>>> [i + ' ' + j for i, j in product(prefix, suffix)]
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...