как поменять два символа в строке питона - PullRequest
0 голосов
/ 18 марта 2012

Мне было интересно, как перевернуть два символа в строке. Вот несколько примеров:

'wing' => 'iwng', 'inwg', 'ingw'

'west' => 'ewst', 'eswt', 'estw'

Я собирался использовать любые приведенные ответы и поместить их в цикл while, чтобы я мог получить все возможные комбинации строки, меняя местами два символа за раз. напр.

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, и проверяет, совпадают ли они, переключая символы вокруг.

ТАКЖЕ, есть ли способ получить это, чтобы получить список результатов, а не печатать их?

СПАСИБО!

Ответы [ 3 ]

2 голосов
/ 18 марта 2012

Попробуйте это:

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)
1 голос
/ 18 марта 2012

Поскольку вы хотите фактически сравнить две строки, чтобы увидеть, являются ли они «одинаковыми, меняя местами два символа», вам на самом деле не нужно генерировать все возможные комбинации, вместо этого вы можете перебирать каждый из символов в каждом изи убедитесь, что не более двух из них не равны.

Это можно сделать следующим образом:

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')
1 голос
/ 18 марта 2012

Чтобы сгенерировать все возможности, мы можем использовать:

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:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...