我有两个字符串,我想一次打印一个字符。就像说
s1 = "Hi"
s2 = "Giy"
for c,d in s1,s2:
print c
print d
我预计输出是HGiiy
. 但是,我得到了输出Hi
。
我在这里做错了什么?
我有两个字符串,我想一次打印一个字符。就像说
s1 = "Hi"
s2 = "Giy"
for c,d in s1,s2:
print c
print d
我预计输出是HGiiy
. 但是,我得到了输出Hi
。
我在这里做错了什么?
你需要使用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
使用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,
您的版本在 tuple 上循环(s1, s2)
,所以它会s1
先打印,然后s2
.
当你写:
for c, d in s1, s2:
# ...
它的意思是:
for c, d in [s1, s2]:
# ...
这与以下内容相同:
for s in [s1, s2]:
c, d = s
# ../
s
什么时候,Hi
字母被解压成c
- d
, . 当你尝试用 做同样的事情时,python 无法解压它,因为有三个字母但只有两个变量。c == 'H'
d == 'i'
Giy
如前所述,您想使用zip_longest
使用这个功能,
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