Обратный список Python
Я пытаюсь изменить строку и использовать приведенный ниже код, но результирующее значение обратного списка - None.
Код:
str_a = 'This is stirng'
rev_word = str_a.split()
rev_word = rev_word.reverse()
rev_word = ''.join(rev_word)
Он возвращает TypeError
. Почему?
Ответы
Ответ 1
.reverse()
возвращает None
. Поэтому вам не следует присваивать его переменной.
Используйте это вместо:
stra = 'This is a string'
revword = stra.split()
revword.reverse()
revword=''.join(revword)
Я запустил код в IDEOne для вас, чтобы вы могли видеть результат. (Также обратите внимание, что вывод stringaisThis
, вы можете использовать ' '.join(revword)
вместо пробела.)
Также обратите внимание, что метод, который вы предоставили, отменяет слова, а не текст. @ron.rothman предоставил ссылку, которая подробно описывает, как полностью изменить строку.
Ответ 2
Это мой личный любимый способ изменить строку:
stra="This is a string"
revword = stra[::-1]
print(revword) #"gnirts a si sihT
или, если вы хотите отменить порядок слов:
revword = " ".join(stra.split()[::-1])
print(revword) #"string a is This"
:)
Ответ 3
Различные развороты строки:
instring = 'This is a string'
reversedstring = instring[::-1]
print reversedstring # gnirts a si sihT
wordsreversed = ' '.join(word[::-1] for word in instring.split())
print wordsreversed # sihT si a gnirts
revwordorder = ' '.join(word for word in instring.split()[::-1])
print revwordorder # string a is This
revwordandorder = ' '.join(word[::-1] for word in instring.split()[::-1])
print revwordandorder # gnirts a si sihT
Ответ 4
В будущем, когда объект имеет такой метод, как [].reverse()
, он обычно выполняет это действие над объектом (т.е. список сортируется и ничего не возвращает, None) в отличие от встроенных функций, таких как sorted
, которые выполняют действие над объектом и возвращают значение (т.е. отсортированный список)
Ответ 5
>>> s = 'this is a string'
>>> s[::-1]
'gnirts a si siht'
>>> ''.join(reversed(s))
'gnirts a si siht'
Ответ 6
Цикл for выполняет итерацию строки с конца (последняя буква) для начала (первая буква)
>>> s = 'You can try this too :]'
>>> rev = ''
>>> for i in range(len(s) - 1, -1, -1):
... rev += s[i]
>>> rev
']: oot siht yrt nac uoY'
Ответ 7
Основываясь на комментариях и других ответах:
str_a = 'this is a string'
rev_word = ' '.join(reversed(str_a.split()))
Цепочка методов действительно работает в Python в конце концов...
Ответ 8
Реверс списка можно сделать несколькими способами.
Как упоминалось в предыдущих ответах, два очень выдающихся, один с функцией reverse()
и два с функцией среза. Я рассказываю о том, какой из них мы предпочли бы.
Мы всегда должны использовать функцию reverse()
для обращения к списку Python. Две причины: один разворот на месте и два быстрее, чем другие.
У меня есть цифры, чтобы поддержать мой ответ,
In [15]: len(l)
Out[15]: 1000
In [16]: %timeit -n1 l.reverse()
1 loops, best of 3: 7.87 µs per loop
In [17]: %timeit -n1 l[::-1]
1 loops, best of 3: 10 µs per loop
Для 1000 целых списков функция reverse()
выполняется лучше по сравнению с нарезкой.