(我确定这已经在某个地方回答了,但我确实找不到正确的问题。也许我不知道该练习的正确动词?)
我有两个列表:
prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
我想得到这个:
output = ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
我知道zip
方法,该方法以加入的列表中最短的长度停止:
output_wrong = [p+' '+s for p,s in zip(prefix,suffix)]
那么最Python化的方式是什么?
编辑:
虽然大多数答案都喜欢itertools.product
,但我却更喜欢这样:
output = [i + ' ' + j for i in prefix for j in suffix]
因为它没有引入新的软件包,但是该软件包是最基本的(好吧,我不知道哪种方法更快,这可能是个人喜好问题。)
答案 0 :(得分:4)
使用列表理解
prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
result = [val+" "+val2 for val in prefix for val2 in suffix ]
print(result)
输出
['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
答案 1 :(得分:3)
使用itertools.product
和列表理解,
>>> [i + ' ' + j for i, j in product(prefix, suffix)]
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
答案 2 :(得分:2)
import itertools
prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
print([f'{x} {y}' for x, y in itertools.product(prefix, suffix)])
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
答案 3 :(得分:1)
这称为笛卡尔积:
[p + ' ' + s for p, s in itertools.product(prefix, suffix)]
答案 4 :(得分:1)
使用product
,
In [33]: from itertools import product
In [34]: map(lambda x:' '.join(x),product(prefix,suffix))
Out[34]: ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
答案 5 :(得分:1)
只需使用list comprehension
:
prefix = ['A', 'B', 'C']
suffix = ['a', 'b']
output = [i+" "+j for i in prefix for j in suffix]
print(output)
输出:
['A a', 'A b', 'B a', 'B b', 'C a', 'C b']
答案 6 :(得分:0)
from itertools import product
map(' '.join, product(prefix, suffix))
# ['A a', 'A b', 'B a', 'B b', 'C a', 'C b']