reversed - reverse sequence python



Лучший способ петли над питонной строкой назад (7)

Каков наилучший способ перевернуть строку 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

Answer #1

Python 3 с enumerate и reversed методами:

string = "trick or treat"
for i, c in enumerate(reversed(string)):
    print(i, c)

Вы можете использовать print (c) только для получения каждого символа без индекса.


Answer #2

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

Первая версия лучше написана так:

for index, char in enumerate(reversed(s)):
   print "pos %d: %s" % (index, char)

Это легко понять. Ни reversed ни reversed `необходимо сделать копию строки.

Также будьте осторожны с использованием string в качестве имени переменной, так как это также имя модуля в стандартной библиотеке .


Answer #3

Меньший код, как правило, быстрее в 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

Таким образом, более короткий код немного быстрее, но он имеет накладные расходы на память.


Answer #4

Обратить строку в Python с помощью цикла

outputStr = ''
a = raw_input("Enter String: ")
for i in range(len(a), 0, -1):
    outputStr += a[i-1]
print outputStr

Answer #5

reversed принимает итерабельность и возвращает итератор, который движется назад. string[::-1] отлично, но вместо этого создается новая, обратная строка. Если вы просто хотите итерации, то это, вероятно, будет лучше:

for c in reversed(string):
    print c

Если вы захотите снова использовать обратную строку, создание ее однажды будет лучше.


Answer #6
 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

Answer #7
string = "trick or treat"
for c in reversed(string):
    print c

Будешь делать то, что я думаю, ты хочешь. Он использует итератор. Это должно работать с чем-либо, что реализовано __reveresed __ () или __len __ () и __getitem __ (). __getitem __ () должен принимать аргументы int начиная с 0.





reverse