切片为子串

问题描述 投票:1回答:3

我被要求有一个字符串循环并反向打印。我可以做到这一点,但为什么祈祷是最后一封信开始...

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],[ - 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  
...
python python-3.x substring slice
3个回答
2
投票

不要只使用-,而是将索引减去字符串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
投票

如果您希望将其打印为句子,您还可以:

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)

0
投票

你的实现不起作用的原因是因为range(len(data))从0开始到n-1。但是当你得到data[-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])

请参阅this post,了解切片在python中的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.