[英]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.