Python - 用于元素明智的字符串连接的双循环

Python - double loop for element wise string concatenation

我的问题很简单:

我有A = ['AA','BB'],B = ['CC','DD']

如何获得 AB = ['AACC','AADD','BBCC',BBDD']

谢谢!

具有列表理解:

AB = [x + y for x in A for y in B]

因此,我们遍历 A 中的元素,对于 A 中的每个元素 x,我们遍历 B,然后添加 x + y加入列表。

或者对于可变数量的列表,并使用生成器:

from itertools import product

map(''.join, product(A, B))

这可以很容易地扩展到可变数量的元素,例如:

>>> A = ['AA','BB']; B = ['CC','DD']; C = ['EE', 'FF']
>>> list(map(''.join, product(A, B, C)))
['AACCEE', 'AACCFF', 'AADDEE', 'AADDFF', 'BBCCEE', 'BBCCFF', 'BBDDEE', 'BBDDFF']

您可以使用 itertools.product:

>>> from itertools import product
>>> A = ['AA','BB']
>>> B = ['CC','DD']
>>> AB = [''.join(p) for p in product(A, B)]
>>> AB
['AACC', 'AADD', 'BBCC', 'BBDD']

这样做的好处是可以处理任意数量的可迭代对象。

更容易看到完整循环中发生的事情,这里我们将采用 i in a,即 AA and BBj in b,即 CC and DD。在我们的第一次迭代中,我们将前两个 AA + CC 然后 append 组合到我们的新列表中,接下来是 AA + DD 然后到 BB 并重复该过程。

a = ['AA','BB'] 
b = ['CC','DD']

res = []
for i in a:
    for j in b:
        x = i + j
        res.append(x)
print(res)
# ['AACC', 'AADD', 'BBCC', 'BBDD']

明白了这个就可以跳过那个过程,用列表推导来做,这个是一样的。

res = [i + j for i in a for j in b]