形成两个字符串列表的笛卡尔积的大多数 Pythonic 方法
Most Pythonic way to form cartesian product of two lists of strings
我有两个字符串列表:
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}")
但我想知道是否有更pythonic的方式?
编辑:我 不是 寻找一种更 pythonic 的方式来制定循环(即列表理解)。相反,我正在寻找一个内置函数,比如
concatenate(l1, l2)
产生了想要的结果
您可以使用列表理解:
print([f"{a}{b}" for a in l1 for b in l2])
您可以尝试列表理解:
>>> l1 = ["Col1", "Col2", "Col3"]
>>> l2 = ["_ad1", "_ad2"]
>>> [f"{a}{b}" for a in l1 for b in l2]
['Col1_ad1', 'Col1_ad2', 'Col2_ad1', 'Col2_ad2', 'Col3_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', 'Col1_ad2', 'Col2_ad1', 'Col2_ad2', 'Col3_ad1', 'Col3_ad2']
您可以使用 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", "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}")
但我想知道是否有更pythonic的方式?
编辑:我 不是 寻找一种更 pythonic 的方式来制定循环(即列表理解)。相反,我正在寻找一个内置函数,比如
concatenate(l1, l2)
产生了想要的结果
您可以使用列表理解:
print([f"{a}{b}" for a in l1 for b in l2])
您可以尝试列表理解:
>>> l1 = ["Col1", "Col2", "Col3"]
>>> l2 = ["_ad1", "_ad2"]
>>> [f"{a}{b}" for a in l1 for b in l2]
['Col1_ad1', 'Col1_ad2', 'Col2_ad1', 'Col2_ad2', 'Col3_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', 'Col1_ad2', 'Col2_ad1', 'Col2_ad2', 'Col3_ad1', 'Col3_ad2']
您可以使用 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']