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 BB
和 j 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]
我的问题很简单:
我有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 BB
和 j 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]