关于循环:在Python中反转句子

To reverse sentence in python

本问题已经有最佳答案,请猛点这里访问。

谢谢你的回答。我知道为什么我的代码是错误的。

请不要为我提供解决方案,因为我确实有一些解决方案,但是我想了解我的代码不起作用。

我认为这是由于while x <= -len(split_result):",但我认为逻辑是正确的。我的代码有什么问题?

1
2
3
4
5
6
7
8
9
10
11
12
13
O_string = ("Me name is Mr_T")
split_result = O_string.split()
print(split_result)

x=0
list=[]

while x <= -len(split_result):
    list.append(split_result[x-1])
    x = x-1

result="".join(list)
print (result)


您可以使用[::-1]反转列表:

1
print(' '.join(O_string.split()[::-1]))

输出:

1
'Mr_T is name Me'

这里,[::-1]意味着从开始到结束,每一步的大小都是-1。

或者,您可以使用内置函数reversed

1
2
>>> ' '.join(reversed(O_string.split()))
'Mr_T is name Me'

关于你的算法。在我看来,用负指数来思考总是比较困难的。我建议积极点:

1
2
3
4
5
6
7
8
9
10
11
O_string = ("Me name is Mr_T")
split_result = O_string.split()

res = []
x = len(split_result) - 1
while x >= 0:
    res.append(split_result[x])
    x = x-1

result="".join(res)
print (result)

输出:

1
'Mr_T is name Me'

在这里:

1
x = len(split_result) - 1

给出列表的最后一个索引。我们开始用0建立索引。所以需要从列表的长度中减去1

你倒计时:

1
x = x-1

一旦你得到一个负指数就停止:

1
while x >= 0:

提示:不要使用list作为变量名。它是内置的,最好不要用于命名自己的对象。如果这样做了,就不能再轻松地使用list()(在同一名称空间中)。


回答"我的代码有什么问题?",让我们看看外壳中发生了什么:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> O_string = ("Me name is Mr_T")
split_result = O_string.split()
print(split_result)
['Me', 'name', 'is', 'Mr_T']
>>> x=0
>>> len(split_result)
4
>>> -len(split_result)
-4
>>> x
0
>>> 0 <= 4
True
>>> 0 <= -4
False
>>> x <= -len(split_result)
False
>>> while False: print('this will not get printed')

所以,while循环条件永远不会是真的,循环也永远不会发生。下面是一个工作的例子:

1
2
3
x = -1
while x >= -len(split_result):
    list.append(split_result[x])


在python中,list[::-1]将为您提供一个列表,其中列表的所有元素都存储在反向索引位置。e.)reverseList1=list1[::-1]使用这个。


可以使用reverse函数和str.join

1
2
3
4
O_string = ("Me name is Mr_T")
split_result = O_string.split()
split_result.reverse()
print"".join(split_result)

您可以使用reverse来颠倒句子:

1
2
3
4
o_string ="Me name is Mr_T"
words = sentence.split()
o_string ="".join(reversed(words))
print(o_string)

你可以试试:

1
2
3
4
5
>>> O_string = ("Me name is Mr_T")
>>> O_list = O_string.split()
>>> O_list.reverse()
>>>"".join(O_list)
'Mr_T is name Me'