Ответ 1
Попробуйте reversed builtin:
for c in reversed(string):
print c
Обратный вызов() вызывает итератор вместо копирования всей строки.
PEP 322 детализирует мотивацию для reverse() и ее преимущества по сравнению с другими подходами.
Каков наилучший способ перебрать строку python назад?
Следующее кажется немного неудобным для всей необходимости смещения -1:
string = "trick or treat"
for i in range(len(string)-1, 0-1, -1):
print string[i]
Следующее выглядит более кратким, но действительно ли оно генерирует обратную строку, чтобы было незначительное ограничение производительности?
string = "trick or treat"
for c in string[::-1]:
print c
Попробуйте reversed builtin:
for c in reversed(string):
print c
Обратный вызов() вызывает итератор вместо копирования всей строки.
PEP 322 детализирует мотивацию для reverse() и ее преимущества по сравнению с другими подходами.
Здесь вы можете изменить строку без использования встроенных функций, таких как reversed
. Отрицательные значения шага обращаются назад.
def reverse(text):
rev = ''
for i in range(len(text), 0, -1):
rev += text[i-1]
return rev
Да, второй ярлык синтаксиса создает промежуточную строку и имеет связанное с этим ограничение производительности.
Первая версия лучше написана как:
for index, char in enumerate(reversed(s)):
print "pos %d: %s" % (index, char)
Это легко понять. Ни reversed
, ни enumerate
`необходимо сделать копию строки.
Также будьте осторожны с использованием string
в качестве имени переменной, так как это также имя модуля в стандартной библиотеке.
string = "trick or treat"
for c in string[::-1]:
print c
Я бы это использовал. Вероятно, это довольно быстро, хотя может быть немного лучше (но я сомневаюсь).
EDIT:
На самом деле, со вторым тестом, используя программу, которую я взломал вместе, reversed
, вероятно, путь.
==== Results ====
Sample 1: 0.0225071907043 # Using a for loop
Sample 2: 0.0100858211517 # Using reversed
Меньший код, как правило, быстрее в Python. К счастью, вам не нужно гадать:
python -mtimeit -s"s='x'*100000" "for x in s[::-1]: pass"
100 loops, best of 3: 1.99 msec per loop
python -mtimeit -s"s='x'*100000" "for x in reversed(s): pass"
1000 loops, best of 3: 1.97 msec per loop
python -mtimeit -s"s='x'*100000" "for i in xrange(len(s)-1, 0-1, -1): s[i]"
100 loops, best of 3: 4.95 msec per loop
Таким образом, более короткий код немного быстрее, но он имеет накладные расходы памяти.
reversed
выполняет итерацию и возвращает итератор, который перемещается назад. string[::-1]
отлично, но вместо этого создается новая, обратная строка. Если вы просто хотите итерации, то это, вероятно, лучше:
for c in reversed(string):
print c
Если вы хотите использовать обратную строку после этого, создание ее однажды будет лучше.
string = "trick or treat"
for c in reversed(string):
print c
Будет делать то, что я думаю, вы хотите. Он использует итератор. Это должно работать с чем-либо, что реализовано __reveresed __() или __len __() и __getitem __(). __getitem __() должен принимать значения int начиная с 0.
def reverse(text):
x = ""
for i in range(len(text)):
x = x + text[len(text)-i-1]
return x
Обратить строку в Python, используя для цикла
outputStr = ''
a = raw_input("Enter String: ")
for i in range(len(a), 0, -1):
outputStr += a[i-1]
print outputStr
Python 3 с методами enumerate
и reversed
:
string = "trick or treat"
for i, c in enumerate(reversed(string)):
print(i, c)
Вы можете использовать print (c) только для получения каждого символа без индекса.
Это действительно простой способ решить эту проблему:
uString = input("Enter phrase")
newString = ""
print(uString) #this shows what it was before reversed.
for elem in uString[::-1]:
newString += elem
print(newString)