问题描述
我有两个字符串列表:
l1 = ["Col1","Col2","Col3"]
l2 = ["_ad1","_ad2"]
我想将两个列表l1
x l2
的笛卡尔积/并置成一个元素,即我想要的结果是:
["Col1_ad1","Col1_ad2","Col2_ad1","Col2_ad2","Col3_ad1","Col1_ad1"]
我当然可以这样:
result = []
for colname in l1:
for suffix in l2:
result.append(f"{colname}{suffix}")
但是我想知道是否还有更Python化的方式?
编辑:我不正在寻找一种更加Python化的方式来表达循环(即列表理解)。相反,我正在寻找一个内置函数,例如
concatenate(l1,l2)
产生了预期的结果
解决方法
您可以使用列表理解:
print([f"{a}{b}" for a in l1 for b in l2])
,
您可以使用itertools.product
>>> from itertools import product
>>> l1 = ["Col1","Col2","Col3"]
>>> l2 = ["_ad1","_ad2"]
>>> list(elem[0] + elem[1] for elem in product(l1,l2))
['Col1_ad1','Col1_ad2','Col2_ad1','Col2_ad2','Col3_ad1','Col3_ad2']
,
您可以尝试理解列表:
>>> l1 = ["Col1","_ad2"]
>>> [f"{a}{b}" for a in l1 for b in l2]
['Col1_ad1','Col3_ad2']
,
尝试理解列表:
print([x+y for x in l1 for y in l2])
您也可以使用格式字符串:
print(["{}{}".format(x,y) for x in l1 for y in l2])
仅适用于python 3.6+(由@AlexNomane指向):
print([f"{x}{y}" for x in l1 for y in l2])
所有输出:
['Col1_ad1','Col3_ad2']