python中两个字符串的笛卡尔乘积

2024-05-09 01:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条线:

x = 'a1,a2,a3'
y = 'b1,b2,b3'

我想将这两个字符串连接为:

z = ['a1b1','a1b2','a1b3','a2b1','a2b2','a2b3','a3b1','a3b2','a3b3']

我使用了代码片段:

for i in x:
     for j in y:
         z.append(i+j)

但结果并不符合要求。如何获得所需的结果


Tags: 字符串ina2fora1b2a3b1
3条回答

您需要^{}拆分","上的字符串,然后可以使用^{}获得两个列表的笛卡尔乘积:

from itertools import product

x = "a1,a2,a3"
y = "b1,b2,b3"

print([fst + snd for fst, snd in product(x.split(","), y.split(","))])
# ['a1b1', 'a1b2', 'a1b3', 'a2b1', 'a2b2', 'a2b3', 'a3b1', 'a3b2', 'a3b3']

您也可以在列表理解中执行此操作,以获得相同的结果:

print([fst + snd for fst in x.split(",") for snd in y.split(",")])
# ['a1b1', 'a1b2', 'a1b3', 'a2b1', 'a2b2', 'a2b3', 'a3b1', 'a3b2', 'a3b3']

或者使用与原始方法类似的解决方案:

z = []
for fst in x.split(","):
    for snd in y.split(","):
        z.append(fst + snd)

print(z)
# ['a1b1', 'a1b2', 'a1b3', 'a2b1', 'a2b2', 'a2b3', 'a3b1', 'a3b2', 'a3b3']

您可以在product上使用starmapadd操作符来进行该操作

from operator import add
from itertools import starmap, product
x = 'a1,a2,a3'
y = 'b1,b2,b3'
z=list(starmap(add, product(x.split(','),y.split(','))))

这就是你要找的

x = 'a1,a2,a3'.split(',')
y = 'b1,b2,b3'.split(',')


[a+b for a in x for b in y]

相关问题 更多 >

    热门问题