1

我有两个字符串,我想一次打印一个字符。就像说

s1 = "Hi"
s2 = "Giy"

for c,d in s1,s2:
    print c
    print d

我预计输出是HGiiy. 但是,我得到了输出Hi

我在这里做错了什么?

4

4 回答 4

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
于 2012-11-03T10:15:08.233 回答
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,

您的版本在 tuple 上循环(s1, s2),所以它会s1先打印,然后s2.

于 2012-11-03T10:11:03.413 回答
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, . 当你尝试用 做同样的事情时,python 无法解压它,因为有三个字母但只有两个变量。c == 'H'd == 'i'Giy


如前所述,您想使用zip_longest

于 2012-11-03T10:14:21.443 回答
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
于 2018-03-15T20:40:36.327 回答