首页 文章

有没有办法对字符串进行子串?

提问于
浏览
1703

有没有办法在Python中对字符串进行子串,以获取从第3个字符到字符串末尾的新字符串?

也许像 myString[2:end]

如果离开第二部分意味着'直到结束',如果你离开第一部分,它是从一开始就开始的吗?

11 回答

  • 2574

    Substr()通常(即PHP和Perl)以这种方式工作:

    s = Substr(s, beginning, LENGTH)
    

    所以参数是 beginningLENGTH .

    但是Python的行为是不同的;它预计在END(!)之后开始和一个 . This is difficult to spot by beginners. 所以正确替换Substr(s,开头,LENGTH)是

    s = s[ beginning : beginning + LENGTH]
    
  • 17

    使用硬编码索引本身就是一团糟 .

    为了避免这种情况,Python提供了一个内置对象 slice() .

    string = "my company has 1000$ on profit, but I lost 500$ gambling."
    

    如果我们想知道剩下多少钱 .

    正常解决方案

    final = int(string[15:19]) - int(string[43:46])
    print(final)
    >>>500
    

    使用切片:

    EARNINGS = slice(15, 19)
    LOSSES = slice(43, 46)
    final = int(string[EARNINGS]) - int(string[LOSSES])
    print(final)
    >>>500
    

    使用切片可以获得可读性 .

  • 6
    >>> x = "Hello World!"
    >>> x[2:]
    'llo World!'
    >>> x[:2]
    'He'
    >>> x[:-2]
    'Hello Worl'
    >>> x[-2:]
    'd!'
    >>> x[2:-2]
    'llo Worl'
    

    Python将此概念称为"slicing",它不仅仅适用于字符串 . 请查看here以获得全面的介绍 .

  • 46

    实现此目的的常用方法是使用字符串切片 . MyString[a:b] 为您提供从索引a到(b - 1)的子字符串

  • 318

    这很简单:

    s = 'Hello, World!'
    print(s[:]) # prints "Hello, World!"
    print(s[:5]) # prints Hello
    print(s[5:]) # prints , World!
    print(s[3:7]) # prints "lo, "
    
  • 2

    这里似乎缺少一个例子:完整(浅)副本 .

    >>> x = "Hello World!"
    >>> x
    'Hello World!'
    >>> x[:]
    'Hello World!'
    >>> x==x[:]
    True
    >>>
    

    这是创建序列类型副本(不是实习字符串)的常用习惯用法 . [:] 浅复制列表,请参阅python-list-slice-used-for-no-obvious-reason .

  • 15

    除了“结束”之外,你已经做到了 . 它被称为切片表示法 . 你的例子应该是:

    new_sub_string = myString[2:]
    

    如果省略第二个参数,则隐含地表示字符串的结尾 .

  • 97

    我想在讨论中加两点:

    • 您可以在空格上使用 None 来指定"from the start"或"to the end":
    'abcde'[2:None] == 'abcde'[2:] == 'cde'
    

    这在函数中特别有用,在这些函数中,您不能提供空格作为参数:

    def substring(s, start, end):
        """Remove `start` characters from the beginning and `end` 
        characters from the end of string `s`.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
    
    • Python有slice个对象:
    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    
  • 7

    有没有办法在Python中对字符串进行子串,以获取从第3个字符到字符串末尾的新字符串?也许像myString [2:end]?

    是的,如果您将名称 end 分配给常量单例 None ,则这实际上有效:

    >>> end = None
    >>> myString = '1234567890'
    >>> myString[2:end]
    '34567890'
    

    切片表示法有3个重要参数:

    • 开始

    • 停止

    • 步骤

    没有给出它们的默认值是 None - 但我们可以明确地传递它们:

    >>> stop = step = None
    >>> start = 2
    >>> myString[start:stop:step]
    '34567890'
    

    如果离开第二部分意味着'直到结束',如果你离开第一部分,它是从一开始就开始的吗?

    是的,例如:

    >>> start = None
    >>> stop = 2
    >>> myString[start:stop:step]
    '12'
    

    请注意,我们在切片中包含start,但我们只会停止,而不是包括停止 .

    当step为 None 时,默认情况下,切片使用 1 作为步骤 . 如果你使用负整数,Python足够聪明,从最后到开头 .

    >>> myString[::-1]
    '0987654321'
    

    我在my answer to Explain slice notation Question.详细解释切片表示法

  • 0

    只是为了完整性,没有人提到它 . 数组切片的第三个参数是一个步骤 . 因此,反转字符串非常简单:

    some_string[::-1]
    

    或者选择替代字符将是:

    "H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
    

    通过字符串前进和后退的能力可以保持与开始或结束的数组切片的一致性 .

  • 4

    也许我错过了,但我在这个页面找不到原始问题的完整答案,因为这里不再进一步讨论变量 . 所以我不得不继续搜索 .

    由于我还没有被允许发表评论,让我在这里加上我的结论 . 访问此页面时,我确信我不是唯一对此感兴趣的人:

    >>>myString = 'Hello World'
     >>>end = 5
    
     >>>myString[2:end]
     'llo'
    

    如果你离开第一部分,你就得到了

    >>>myString[:end]
     'Hello'
    

    如果你离开了:在中间你也得到了最简单的子串,这将是第5个字符(从0开始计数,所以在这种情况下它是空白):

    >>>myString[end]
     ' '
    

相关问题