给出2个字符串:
a='AAAAAAAA'
b='GGGG'
我希望得到
的结果'AG','AG','AG','AG','A','A','A','A'
到目前为止,我已经尝试了两种方法,而且它们都只返回了4个项目
地图方法:
list(map(lambda x,y:x+y,a,b))
结果:
'AG','AG','AG','AG'
Zip方法:
list(zip(a,b))
结果:
('A','G'),('A','G'),('A','G'),('A','G')
地图方法看起来更接近我正在寻找的
答案 0 :(得分:6)
您可以使用接受fillvalue
参数的itertools.zip_longest
:
>>> from itertools import zip_longest
>>> a='AAAAAAAA'
>>> b='GGGG'
>>> [''.join(i) for i in zip_longest(a,b,fillvalue='')]
['AG', 'AG', 'AG', 'AG', 'A', 'A', 'A', 'A']
如果您想在不导入库的情况下执行此操作,可以查看zip_longest
源代码。您可能会注意到这是执行此类任务的最pythonic方式。
顺便说一下,您可以使用其他非pythonic和高效的方法,例如,您可以使用atr.ljust
用特殊字符填充b
并使其大小等于{{1}然后压缩它们并使用列表推导来获得预期的输出:
a
答案 1 :(得分:2)
然而,没有导入是一个奇怪的请求:
>>> a='AAAAAAAA'
>>> b='GGGG'
>>> [a[i: i + 1] + b[i: i + 1] for i in range(max(map(len, (a, b))))]
['AG', 'AG', 'AG', 'AG', 'A', 'A', 'A', 'A']
或
>>> [''.join(i) for i in zip(a, b)] + list(a[len(b):]) + list(b[len(a):])
['AG', 'AG', 'AG', 'AG', 'A', 'A', 'A', 'A']
导入itertools是一个更好的解决方案
答案 2 :(得分:0)
a='AAAAAAA'
b='GGGG'
listab=[] #declaring new list
for i in range(0,len(a)): #loops for length of a
item = a[i:i+1] + b[i:i+1] #concatenates a letter from a and b
listab.append(item)
print (listab)
for i in range(0,len(a))
将整数i从0增加到(a) string[start position: end position]
返回字符串中起始位置和结束位置1之间的部分。