【问题标题】: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 &lt;= 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)
        

        【讨论】: