Python - двойной цикл для поэлементного объединения строк - PullRequest
0 голосов
/ 14 октября 2018

У меня очень простой вопрос:

У меня есть A = ['AA','BB'], B = ['CC','DD']

Как мне получить AB = ['AACC','AADD','BBCC',BBDD']?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Вы можете использовать itertools.product:

>>> from itertools import product
>>> A = ['AA','BB']
>>> B = ['CC','DD']
>>> AB = [''.join(p) for p in product(A, B)]
>>> AB
['AACC', 'AADD', 'BBCC', 'BBDD']

Это дает преимущество работы с любым количеством повторяемых элементов.

0 голосов
/ 14 октября 2018

Проще увидеть, что происходит в полном цикле, здесь мы возьмем i in a, что будет AA and BB и j in b, что будет CC and DD.На нашей первой итерации мы объединяем первые два AA + CC, затем append их в наш новый список, затем идет AA + DD, затем на BB, и процесс повторяется.

a = ['AA','BB'] 
b = ['CC','DD']

res = []
for i in a:
    for j in b:
        x = i + j
        res.append(x)
print(res)
# ['AACC', 'AADD', 'BBCC', 'BBDD']

После того, как вы это пойметеВы можете пропустить этот процесс и сделать это с пониманием списка, это идентично.

res = [i + j for i in a for j in b]
0 голосов
/ 14 октября 2018

с списком :

AB = [x + y for x in A for y in B]

мы, таким образом, перебираем элементы в A, а для каждого элемента x в A мы перебираем B, а затем добавьте x + y в список.

Или для переменного числа списков и с генератором:

from itertools import product

map(''.join, product(A, B))

Это может быть легко расширено до переменного числа элементов, как:

>>> A = ['AA','BB']; B = ['CC','DD']; C = ['EE', 'FF']
>>> list(map(''.join, product(A, B, C)))
['AACCEE', 'AACCFF', 'AADDEE', 'AADDFF', 'BBCCEE', 'BBCCFF', 'BBDDEE', 'BBDDFF']
...