RichAndMerry 2024-02-24 17:28 采纳率: 0%
浏览 5

Python中字符串切片和列表append的问题

反转字符串单词的问题中。
没明白用B的形式reS.append(s[right + 1:right + t + 1:-1])写,实际最终输出的是"   "。
输入:s = "a good   example"
理论输出:"example good a"

我知道这种步长-1的反序输出是错误的,但是我觉得就算是错误输出也该是"elpmaxe doog a"啊?但为什么是“ ”?
这是不懂的地方。

class Solution:
    def reverseWords(self, s: str) -> str:
        reS = []
        left, right =0, len(s) - 1
        while left <= right and s[left] == " ":
            left += 1
        while right >= left and s[right] == " ":
            right -= 1
        while right >= left:
            t = 0
            while right >= left and s[right] != " ":
                t += 1  
                right -= 1
            reS.append(s[right + 1:right + t + 1])  
#           reS.append(s[right + 1:right + t + 1:1])   -------A
#           reS.append(s[right + 1:right + t + 1:-1])  -------B          
            while right >= left and s[right] == " ":
                right -= 1    
        return " ".join(reS)

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-24 17:29
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的关键在于理解字符串切片和列表append的作用。让我们逐步分析解决这个问题。
    首先,我们来看A和B两种写法的区别:

    • A形式:reS.append(s[right + 1:right + t + 1]),这里使用的是正向切片,即从右侧索引right + 1right + t + 1,这样得到的是一个单词的正常顺序。
    • B形式:reS.append(s[right + 1:right + t + 1:-1]),这里使用的是逆向切片,即从右侧索引right + 1right + t + 1,但步长为-1,因此实际上是将单词反转了。
      因此,在B形式中,虽然取出了每个单词,但是这些单词都是反转的,所以最终输出的结果也是反转的。而在A形式中,取出的单词顺序是正常的,因此输出的结果也是正常的。
      解决方案:
      如果想要实现题目要求的正常输出,应该使用A形式的写法,即正向切片。这样可以保持单词的正常顺序。
      具体代码如下:
      pythonCopy code
      class Solution:
      def reverseWords(self, s: str) -> str:
      reS = []
      left, right = 0, len(s) - 1
      # 去除字符串两端的空格
      while left <= right and s[left] == " ":
      left += 1
      while right >= left and s[right] == " ":
      right -= 1
      while right >= left:
      t = 0
      while right >= left and s[right] != " ":
      t += 1
      right -= 1
      reS.append(s[right + 1:right + t + 1])   # 使用正向切片取出单词
      while right >= left and s[right] == " ":
      right -= 1
      return " ".join(reS)
      
      这样就能够正确输出题目要求的结果了。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 修改了问题 2月24日
  • 修改了问题 2月24日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数