有没有办法在Python中对字符串进行子串,以获取从第3个字符到字符串末尾的新字符串?
也许喜欢myString[2:end]
?
如果离开第二部分意味着'直到结束',如果你离开第一部分,它是从一开始就开始的吗?
>>> x = "Hello World!" >>> x[2:] 'llo World!' >>> x[:2] 'He' >>> x[:-2] 'Hello Worl' >>> x[-2:] 'd!' >>> x[2:-2] 'llo Worl'
Python将这个概念称为"切片",它不仅仅是字符串.看看这里的全面介绍.
只是为了完整性,没有人提到它.数组切片的第三个参数是一个步骤.因此,反转字符串非常简单:
some_string[::-1]
或者选择替代字符将是:
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
通过字符串前进和后退的能力可以保持与开始或结束的数组切片的一致性.
Substr()通常(即PHP和Perl)以这种方式工作:
s = Substr(s, beginning, LENGTH)
所以参数是beginning
和LENGTH
.
但是Python的行为是不同的; 它期望开始和END之后的一个(!).初学者很难发现这一点.所以正确替换Substr(s,开头,LENGTH)是
s = s[ beginning : beginning + LENGTH]
实现此目的的常用方法是通过字符串切片.
MyString[a:b]
为您提供从索引a到(b - 1)的子字符串.
这里似乎缺少一个例子:完整(浅)副本.
>>> x = "Hello World!" >>> x 'Hello World!' >>> x[:] 'Hello World!' >>> x==x[:] True >>>
这是创建序列类型副本(不是实习字符串)的常用习惯用法[:]
.浅复制一个列表,看看没有明显原因使用的Python列表切片语法.
有没有办法在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'
我在解释切片符号问题的答案中详细解释了切片符号.
除了"结束"之外,你已经做到了.它被称为切片表示法.你的例子应该是:
new_sub_string = myString[2:]
如果省略第二个参数,则隐含地表示字符串的结尾.
我想在讨论中加两点:
您可以None
在空白空间中使用以指定"从开头"或"到结尾":
'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有切片对象:
idx = slice(2, None) 'abcde'[idx] == 'abcde'[2:] == 'cde'