【问题标题】:Given a sentence, return a sentence with the words reversed给定一个句子,返回一个单词颠倒的句子
【发布时间】:2026-01-17 20:25:01
【问题描述】:
def master_yoda(text):
txt_elements=text.split()
index=-1
reverse=[]
i=0
while i <= len(txt_elements):
reverse.append(txt_elements[index])
index=index-1
i+=1
final=' '.join(reverse)
return final
print(master_yoda('i adore that'))
我不明白为什么我不断收到关于取消缩进的错误。
这是一个例子:
【问题讨论】:
-
我没有收到取消缩进错误,但我确实收到了第 7 行的IndexError: list index out of range reverse.append(txt_elements[index])。请发送minimal reproducible example。顺便说一句,欢迎来到 Stack Overflow!查看tour。
标签:
python
arrays
string
list
reverse
【解决方案1】:
改变一下
while i <= len(txt_elements):
到
while i < len(txt_elements):
请记住,您也可以这样做:
def master_yoda(text):
return ' '.join(text.split()[::-1])
在此示例中,[::-1] 使用切片反转列表。你也可以使用reversed() python 内置 - 见comment by @wjandrea
【解决方案2】:
如果txt_elements的长度为3,则最大索引为2,因为python从0开始索引。您的while循环中的i最终将是3(i <= len(txt_elements)),这会导致索引错误,因为txt_elements[3]。查看其他答案以获取解决方案。
【解决方案3】:
(这开始是一个评论,但太大了。它主要是相关的建议,但我在底部放了一个解决方案。)
循环索引的更 Pythonic 方式是
for i in range(len(txt_elements))
或者如果你使用这些物品,
for i, item in enumerate(txt_elements)
但由于没有使用i,因此要循环相同的次数,您可以使用
for _ in txt_elements
但是由于您使用循环来构建另一个列表并且没有其他处理,因此您可以使用
reverse = reversed(txt_elements)
此时你不妨把它压缩成一行,就像@CDJB 推荐的那样:
def master_yoda(text):
return ' '.join(reversed(text.split()))
【解决方案4】:
def master_yoda(文本):
x=text.split()
x.reverse()
return " ".join(x)