【问题标题】:Python: How to slice string using string?Python:如何使用字符串对字符串进行切片?
【发布时间】:2021-03-12 04:51:53
【问题描述】:

假设用户输入:

"i like eating big apples"

想要删除“吃”和“苹果”以及这两个词之间的任何内容。本例输出

"i like"

在另一种情况下,如果用户输入:

"i like eating apples very much"

预期输出:

"i like very much"

我想从“吃”到“苹果”分割输入 (但不能使用索引,因为不确定用户要输入多长时间,但保证会输入“吃”和“苹果”)

那么,有没有什么方法可以不使用索引滑动,而是用另一个字符串来指示幻灯片的开始和结束?

【问题讨论】:

  • 你的预期输出是什么?
  • 期望去掉“吃大苹果”,输出“我喜欢”,但是如果用户输入“我非常喜欢吃苹果”,“吃苹果”这两个词和中间的任何一个都应该是删除,所以输出“我非常喜欢” PS对不起,如果我的解释难以理解...
  • 不,在字符串中切片适用于整数索引。还有其他方法,但您不能对字符串使用切片。只需找到您想要的职位。
  • 哦...可以展示其他一些获得预期输出的方法吗?

标签: python string input indexing slice


【解决方案1】:

您可以使用str.partition 将字符串分成三部分。

In [112]: s = "i like eating apples very much"                                                                                                                            
                                                                                                                                                                          
In [113]: h, _, t = s.partition('eating')                                                                                                                                 
                                                                                                                                                                          
In [114]: _, _, t = t.partition('apples')                                                                                                                                 
                                                                                                                                                                          
In [115]: h + t                                                                                                                                                           
Out[115]: 'i like  very much'                                                                                                                                             
                                                                                                                                                                          
In [116]: s = "i like eating big apples"                                                                                                                                  
                                                                                                                                                                          
In [117]: h, _, t = s.partition('eating')                                                                                                                                 
                                                                                                                                                                          
In [118]: _, _, t = t.partition('apples')                                                                                                                                 
                                                                                                                                                                          
In [119]: h + t                                                                                                                                                           
Out[119]: 'i like '                   

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

    s = "i like eating big apples"
    start_ = s.find("eating")
    end_ = s.find("apples") + len("apples")
    s[start_:end_]  # 'eating big apples'
    

    使用find()在字符串中查找所需单词的起始索引,然后根据需要调整start_/end_

    删除子字符串:

    s[:start_] + s[end_:]  # i like
    

    对于:

    s = "i like eating apples very much"
    end_ = s.find("apples") + len("apples")
    start_ = s.find("eating")
    s[:start_] + s[end_:]  # 'i like  very much'
    

    【讨论】:

      【解决方案3】:

      在python中对字符串进行切片是这样的:

      mystr = "i like eating big apples"
      print(mystr[10:20])
      

      这意味着在字符串的第 10 个字符边界和第 20 个字符之间。所以它会变成:ing big ap

      现在的问题是如何找出“吃”开始和“苹果”结束的索引。

      使用.index 方法在字符串中查找某些内容的开头。

      mystr.index('eating') 返回 7,因此如果您打印 mystr[7:](这意味着从第 7 个索引到字符串的最后一个),您将拥有 'eating big apples'

      第二部分有点棘手。如果你使用mystr.index('apple'),你会得到苹果的开头,(18),所以 mystr[7:18] 会给你'eating big '

      事实上,您还应该进一步添加一些字符来包含 apple 词,即 5 个字符,这个数字将由 len('apple') 返回。所以最终的结果是:

      start = mystr.index('eating')
      stop = mystr.index('apple') + len('apple')
      print(mystr[start:stop])
      

      【讨论】:

        【解决方案4】:

        使用find()rfind()方法搜索子字符串的出现索引,然后将方法的结果粘贴到切片中:

        s = "i like eating big apples"
        substr = s[s.rfind("eating"):s.rfind("apples")]
        

        【讨论】:

          【解决方案5】:
          S = "i like eating big apples"
          Index = S.find("eating")
          output = S[Index:-1]
          

          【讨论】:

          • OP 对该输入的预期输出应该是“我喜欢”。
          • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
          【解决方案6】:

          也许你可以使用这个:

          txt = "Hello, welcome to my world."
          
          x = txt.find("welcome")
          
          print(x)
          

          输出:7 找到“吃”和“苹果”

          【讨论】:

            猜你喜欢
            • 2012-12-25
            • 2012-07-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-08
            • 1970-01-01
            • 2020-11-27
            • 2012-11-20
            相关资源
            最近更新 更多