形成两个字符串列表的笛卡尔积的最Pythonic方法

问题描述

我有两个字符串列表:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...