一次遍历两个字符串python

时间:2012-11-03 10:10:26

标签: python

我有两个字符串,我想一次打印一个字符。比如说

s1 = "Hi"
s2 = "Giy"

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

我预计输出为HGiiy。但是,我得到输出Hi

我在这里做错了什么?

4 个答案:

答案 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
    # ../

sHi时,这些字母会被解压缩到cd - 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