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']