Нарезка для подстрок - PullRequest
1 голос
/ 14 апреля 2019

Меня просят завести строку и напечатать в обратном порядке.Я могу заставить это сделать это, но почему молитва - последняя буква, начинающая это ...

data = "Why am I doing this is reverse order."

for index in range(len(data)):
    print(index, data[-index])

0 W
1 .
2 r
3 e
4 d
5 r
6 o
7  
...

Ах, это самое близкое, что я пришел ... не добавляя данные [: - index],[-индекс:] ... все они не правы ...

data = "Why am I doing this is reverse order."

for index in range(len(data)):
    print(index, data[-index])


0 W
1 .
2 r
3 e
4 d
5 r
6 o
7  
...

Ответы [ 3 ]

2 голосов
/ 14 апреля 2019

Не используйте только -, но вычтите индекс на строку len:

data = "Why am I doing this is reverse order."

l = len(data) - 1
for index in range(l+1):
    print(index, data[l-index])

Вывод:

0 .
1 r
2 e
...
34 y
35 h
36 W

В качестве альтернативы способ pythonic это будет использовать reversed:

for l in reversed(data):
    print(l)

Также вы можете использовать нарезку, data[::-1], но я бы избегал этого, если вы не хотите обращенную копию строки.

0 голосов
/ 14 апреля 2019

Причина, по которой ваша реализация не работает, заключается в том, что range(len(data)) начинается с 0 до n-1.Однако когда ваш get data[-index], где index равен 0, он возвращает 0 элемент строки;первая буква.

Простая реализация:

data = 'Hello world!'

# Print every letter on different line
for x in data[::-1]:
    print(x)

# Print the reverse string on one line
print(data[::-1])

см. в этом посте о том, как работает нарезка в python.

0 голосов
/ 14 апреля 2019

Если вы хотите, чтобы оно было напечатано как предложение, вы также можете:

reversed_data = data[::-1]
print(reversed_data)

ИЛИ

reversed_data = reversed(data)
print("".join(list(reversed_data)))

Или, если вы хотите, чтобы оно было посимвольно:

reversed_data = data[::-1]
for char in reversed_data:
    print(char)
reversed_data = reversed(data)
for char in reversed_data:
    print(char)
...