2012-03-18 48 views
0

我想知道如何反转字符串中的两个字符。 下面是一些例子:如何反转字符串中的两个字符python

'翼'=> 'iwng', 'INWG', 'ingw'

'西方'=> 'ewst', 'ESWT', 'estw'

我打算使用任何给定的答案,并将其放在while循环中,以便一次交换两个字符时可以获得所有可能的字符串组合。 ex。

counter = 0

while (counter <= len(str1)): 
    if str1 == reverse(str2): 
     return str2 
    elif str1 == str2 
     return str2 
    else: 
     str1 = *some code that would swap the the characters m and n* 
     str1 = 
     n += 1 
     m += 1 
return False 

该代码比较两个字符串,STR1至STR2,并检查它们是否通过交换周围的人物一样。

另外,有没有办法让我产生结果列表而不是打印它们?

谢谢!

+0

你是怎么从'west'得到'通过交换两个字符eswt'? – Doboy 2012-03-18 00:36:29

+0

定义“交换”。这是功课吗? – 2012-03-18 00:46:57

+0

您在通过字符串时并排交换两个字符。所以交换[0]和[1],然后[1] [2],然后[2] [3]等。 – Jerry 2012-03-18 00:47:20

回答

1

试试这个:

s = 'wing' 
s = 'west' 
l = [x for x in s] 
for i in xrange(len(s)-1): 
    l[i], l[i+1] = l[i+1], l[i] 
    print "".join(l) 
+0

好的,太棒了!那个好漂亮!而不是打印它,我只是想要每个循环迭代的结果,我只是追加''.join(l)到本地定义的变量? – Jerry 2012-03-18 00:45:59

+0

我知道了,nvm,谢谢pastebt! – Jerry 2012-03-18 00:54:12

+4

它只是'l = list(s)',不需要列表理解。 – agf 2012-03-18 01:07:08

1

为了产生所有的可能性,我们可以使用:

s = "yourstring" 
for i in range(0,len(s)-2): 
    if i>0: print s[:i]+s[i+1:i-1:-1]+s[i+2:] 
    else: print s[1]+s[0]+s[2:] 
1

既然你要真正比较两个字符串,看看他们“是通过交换相同两个字符“,您实际上不需要生成所有可能的组合,而是可以遍历每个字符串中的每个字符,并确保不超过两个字符不相等。

这是可以做到如下:

def twoCharactersDifferent(str1,str2): 
    if sorted(str1) != sorted(str2): #they must contain the same letters, exactly! 
     return False  
    numDifferent = 0  
    for i in range(len(str1)): 

     numDifferent += (str1[i] != str2[i]) 
     if numDifferent >2: 
      return False 
    return True 

print twoCharactersDifferent('wings','winxg')