перевернуть слова в предложении, используя Python? - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь перевернуть слово в предложении.

например:

arr = [ 'p', 'e', 'r', 'f', 'e', 'c', 't', '  ',
        'm', 'a', 'k', 'e', 's', '  ',
        'p', 'r', 'a', 'c', 't', 'i', 'c', 'e' ]

должно быть

[ 'p', 'r', 'a', 'c', 't', 'i', 'c', 'e', '  ',
  'm', 'a', 'k', 'e', 's', '  ',
  'p', 'e', 'r', 'f', 'e', 'c', 't' ]

Я написал следующий код, который переворачивает весь массив, затем переворачивает каждое слово

def reverse_words(arr):

  def mirrorReverse(arr,start,end):
    while(start<end):
      tmp=arr[start]
      arr[start]=arr[end]
      arr[end]=tmp
      start+=1
      end-=1

  n=len(arr)
  mirrorReverse(arr,0,n-1)

  for i in range(len(arr)):
    if arr[i]=='  ' and start==0: #first word
      mirrorReverse(arr,start,i-1)
      start=i+1
    elif i==len(arr)-1: #last word  
      mirrorReverse(arr,start,i)

    elif arr[i]=='  ' and start!=None: #middle
        mirrorReverse(arr,start,i-1)
        start=i+1

  return arr  

это работает нормально и выдает требуемый ответ, однако, когда я использую другой пример, он не работает:

тест 1: ["a"," "," ","b"]

Ожидаемый: ["b"," "," ","a"]

Фактический: ['a', ' ', ' ', 'b']

test2: ["y","o","u"," ","w","i","t","h"," ","b","e"," ","f","o","r","c","e"," ","t","h","e"," ","m","a","y"]

выход: ['y', 'o', 'u', ' ', 'w', 'i', 't', 'h', ' ', 'b', 'e', ' ', 'f', 'o', 'r', 'c', 'e', ' ', 't', 'h', 'e', ' ', 'm', 'a', 'y']

, хотя test2 похож на основной пример, который работал отлично. Любая помощь

Ответы [ 4 ]

2 голосов
/ 12 октября 2019

Во-первых, в приглашении Python:

>>> def revwords(str):
...    list = str.split()
...    list.reverse()
...    return ' '.join(list)
... 
>>> revwords('The quick brown fox jumped over the lazy dogs.')
'dogs. lazy the over jumped fox brown quick The'

Мы можем использовать вышеупомянутое с требуемым представлением массива символов, выполнив некоторую рекомбинацию и разбиение. Продолжение в приглашении Python:

>>> list(revwords(''.join(['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'])))
['w', 'o', 'r', 'l', 'd', ' ', 'H', 'e', 'l', 'l', 'o']
1 голос
/ 12 октября 2019

Ваш код выглядит хорошо. У вас есть двойной пробел в вашем примере и коде. Однако в тестовых случаях есть один пробел. Когда я копирую, вставляю ваш код и меняю двойные пробелы внутри if на одиночные пробелы, все работает.

1 голос
/ 12 октября 2019

Вот один из способов перестановки присоединения предложения:

sentence = "perfect makes practice"
s_list = sentence.split(" ")
s_list.reverse()
print(" ".join(s_list))
1 голос
/ 12 октября 2019

Пожалуйста, попробуйте следующее решение для вашего конкретного случая:

if __name__ == "__main__":
    x = ['p', 'e', 'r', 'f', 'e', 'c', 't', '', 'm', 'a', 'k', 'e', 's', '', 'p', 'r', 'a', 'c', 't', 'i', 'c', 'e']
    words = []
    word = ""
    for letter in x:
        if len(letter) == 1:
            word += letter
        else:
            words.append(word)
            word = ""
    words.append(word)  # add the last one
    result = []
    for w in words[::-1]:
        for letter in w:
            result.append(letter)
        result.append("")

    result.pop()  # remove the last one ""
    print(result)
...