Python, поэлементое объединение двух списков

Есть:\

a = ['a', 'b' , 'c']
b = ['d', 'e']

надо:

с = ['ad', 'ae', 'bd', 'be', 'cd', 'ce]

Одна проблема в списках по 20 тысяч элементов и в конечном итоге должно получится почти пол миллиарда элементов.


Ответы (3 шт):

Автор решения: Dmitry

Без лишних заморочек, через for

a = ['a', 'b' , 'c']
b = ['d', 'e']
result=[]
for i in a:
    for k in b:
        result.append(i+k)
print(result)

Вывод

['ad', 'ae', 'bd', 'be', 'cd', 'ce']

Попробуйте так

from itertools import product

c = []
for i in map("".join, product(a, b)):
    c.append(i)

UPD

Добавлю тест

from datetime import datetime
from itertools import product

import random
import string

st = string.ascii_letters
a1 = [random.choice(st) for i in range(7500)]
a2 = [random.choice(st) for i in range(7500)]
start_time = datetime.now()

c = []
for i in map("".join, product(a1, a2)):
    c.append(i)

print(datetime.now() - start_time)
print(len(c))

Вывод

0:00:32.137720
56250000

c 15000 элементов в каждом массиве

0:02:07.818000
211630648

с 20000 элементов спокойно

0:03:58.849912
400000000

Рухнула на 40000

→ Ссылка
Автор решения: ProstProgrammist
a = list(range(1, 100000))
b = list(range(1, 100000))

with open('result.txt', 'a') as file:
    for el_a in a:
        for el_b in b:
            file.write(f'{el_a}{el_b}\n')
→ Ссылка
Автор решения: 4500zenja

Если нужно получить список из объединённых букв, то можете попробовать смесь из itertools и map(''.join, получившиеся комбинации) — последняя функция как раз объединит все комбинации в строки, а их — в список.

import itertools

a = ['a', 'b' , 'c']
b = ['d', 'e']

print(list(map(''.join, itertools.product(a, b))))
# ['ad', 'ae', 'bd', 'be', 'cd', 'ce']
→ Ссылка