我有两个字符串,我想一次打印一个字符。比如说
s1 = "Hi"
s2 = "Giy"
for c,d in s1,s2:
print c
print d
我预计输出为HGiiy
。但是,我得到输出Hi
。
我在这里做错了什么?
答案 0 :(得分:3)
您需要使用itertools.izip_longest()
:
In [7]: from itertools import izip_longest
In [8]: s1="Hi"
In [9]: s2="Giy"
In [10]: "".join("".join(x) for x in izip_longest(s1,s2,fillvalue=""))
Out[10]: 'HGiiy'
或使用简单的for
循环:
s1="Hi"
s2="Giy"
ans=""
for i in range(min(len(s1),len(s2))):
ans+=s1[i]+s2[i]
ans += s1[i+1:]+s2[i+1:]
print ans #prints HGiiy
答案 1 :(得分:2)
使用zip()
:
for c, d in zip(s1, s2):
print c, d,
请注意,这确实会将循环限制为字符串的最短。
如果您需要所有字符,请改用itertools.izip_longest()
:
from itertools import izip_longest
for c, d in izip_longest(s1, s2, fillvalue=''):
print c, d,
您的版本在元组(s1, s2)
上循环播放,因此它首先打印s1
,然后打印s2
。
答案 2 :(得分:2)
当你写:
for c, d in s1, s2:
# ...
这意味着:
for c, d in [s1, s2]:
# ...
与以下内容相同:
for s in [s1, s2]:
c, d = s
# ../
当s
为Hi
时,这些字母会被解压缩到c
和d
- c == 'H'
,d == 'i'
。当你尝试用Giy
做同样的事情时,python无法解压缩它,因为有三个字母但只有两个变量。
如前所述,您想使用zip_longest
答案 3 :(得分:0)
使用此功能,
def mergeStrings(a, b):
s = ''
count = 0
for i in range(min(len(a),len(b))):
s+=a[i]
s+=b[i]
count+=1
s+= a[count:] if len(a) > len(b) else b[count:]
return s