Это альтернативный ответ с использованием itertools.product
и понимания, который дает вам почти точный результат, который вы просили:
from pprint import pprint
from itertools import product
a = ['a', 'b', 'c', 'd']
b = ['1', '2', '3', '4']
axb = [
[''.join(_) for _ in list(product(a, b))][_:_ + len(a)]
for _ in range(0, len(a) * len(b), len(a))
]
pprint(axb)
В результате:
[['a1', 'a2', 'a3', 'a4'],
['b1', 'b2', 'b3', 'b4'],
['c1', 'c2', 'c3', 'c4'],
['d1', 'd2', 'd3', 'd4']]
Как видите, вам нужно будет транспонировать axb
, чтобы получить точный результат. Это может быть достигнуто с помощью numpy.transpose()
, например. Посмотрите:
>>> from numpy import transpose
>>> transpose(axb)
array([['a1', 'b1', 'c1', 'd1'],
['a2', 'b2', 'c2', 'd2'],
['a3', 'b3', 'c3', 'd3'],
['a4', 'b4', 'c4', 'd4']], dtype='<U2')
>>>
Если вы хотите придерживаться стандартных модулей Python, вы можете транспонировать результат с помощью:
axbcopy = axb.copy()
for i in range(len(axb)):
for j in range(len(axb[0])):
axbcopy[i][j] = axb[j][i]
Или с более Pythoni c Метод:
axbt = list(map(list, zip(*axb)))
Где axbt
будет содержать окончательный результат.