Учитывая ваши списки префиксов letters
и суффиксов numbers
, которые необходимо объединить
letters = ['abc', 'def', 'ghi']
numbers = ['123', '456']
Basi c
Первое решение, которое приходит на ум (особенно если вы новичок в Python) использует вложенные циклы
result = []
for s in letters:
for n in numbers:
result.append(s+n)
, и поскольку, как вы сказали, порядок не имеет значения, также будет допустимым решением следующее:
result = []
for n in numbers:
for s in letters:
result.append(s+n)
наиболее важным недостатком обоих является то, что вам нужно определить переменную result
раньше, чтобы это выглядело немного слабым.
Advanced
Если вы переключитесь на понимание списка вы можете удалить эту лишнюю строку
result = [s+n for n in numbers for s in letters]
Эксперт
Математически говоря, вы создаете декартово произведение из numbers
и letters
. Python предоставляет функцию именно для этой цели с помощью itertools.product (который, кстати, также устраняет двойные for
s)
from itertools import product
result = [''.join(p) for p in product(letters, numbers)]
это может показаться излишним в вашем примере, но как только дело доходит до большего количества компонентов для построения результатов, это может быть большая разница, и все инструменты, представленные здесь, кроме itertools.product
, будут иметь тенденцию взорваться.
Для иллюстрации я завершаю примером, который перебирает префиксы, инфиксы и постфиксы:
print([''.join(p) for p in product('ab', '+-', '12')])
, который дает следующий результат:
['a+1', 'a+2', 'a-1', 'a-2', 'b+1', 'b+2', 'b-1', 'b-2']