簡體   English   中英

形成兩個字符串列表的笛卡爾積的最 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])

您可以使用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"]
>>> [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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM