WithCoderWithCoderWithCoder

Python基本数据类型之字符串

    字符串是 Python 中最常用的数据类型,在 Python 中表示文本的数据类型。字符串(String)是由零个或多个字符组成的有限序列,我们可以使用单引号('')或双引号("")来创建字符串。

    字符只是一个符号,例如:字母(A-Z)、数字(0-9)、特殊符号(~!@#¥%…)等。Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

    一、字符串定义

    在 Python 中,字符串由内置的 str 类型定义。可以使用以下方式定义字符串:

    1.1 单引号('')或双引号("")

>>> s = 'Hello,world' # 单引号定义
>>> type(s)
<class 'str'>
>>> s1 = "Hello,Python" # 双引号定义
>>> type(s1)
<class 'str'>
>>>

    在使用时,单引号比双引号更常用。

    1.2 字符串可以跨多行,但是每行末尾必须添加反斜杠(\)以转义换行符。

>>> s = 'Hello,\
world'
>>> s
'Hello,world'
>>>

    1.3 三重引号(''' 或 """)内的字符串可以跨多个文本行。

>>> # 三重单引号
>>> s = '''Hello
world'''
>>> s
'Hello\nworld'
>>> # 三重双引号
>>> s = """Hello
Python"""
>>> s
'Hello\nPython'
>>>

    注意: 三重引号通常用于表示多行字符串和 docstring。

    二、访问字符串

    2.1 字符串是字符的有序序列,可以通过其位置(索引)来获取具体的字符。

    索引分为两种形式:

        正向索引(从左到右):索引从 0 开始,直到 length - 1,可以很方便地访问字符串开头附近的字符。

        反向索引(从右到左):索引从 -1 开始,直到 -length,可以很方便地访问字符串末尾附近的字符。    

    其中,length 为字符串的长度。

    字符串索引如下图所示:

    1-200512125P0K6.png

    例1,使用正向索引来访问指定索引处的字符:

>>> s = 'Hello'
>>> s[0] # 第一个字符
'H'
>>> s[4] # 最后一个字符
'o'
>>>

    例2,使用负索引(反向索引)从字符串的末尾开始计数,也可以起到同样的效果:

>>> s = 'Hello'
>>> s[-5] # 第一个字符
'H'
>>> s[-1] # 最后一个字符
'o'
>>>

    注意,试图访问索引范围外的字符会引发 IndexError。索引必须是一个整数,不能使用 float 或其他类型,这将引发 TypeError。

# 索引必须在范围内
>>> s = 'Hello'
>>> s[10]
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    s[10]
IndexError: string index out of range
# 索引必须是整数 
>>> s = 'Hello'
>>> s[1.5]
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    s[1.5]
TypeError: string indices must be integers
>>>

    2.2 通过索引可以访问字符串中的单个字符,除此之外,可以通过截取操作引用字符串序列(通常是字符串和列表)的子部分。

    截取操作的语法格式:

[start:stop:step]
    • start(开始索引):第一个索引的值是 0,最后一个是 -1。

    • stop(结束索引):切片操作符将取到该索引为止,但不包含该索引的值。

    • step(步长):默认是 1,也就是说,一个接一个切取。如果为 2,则表示隔一取一。步长为正数时,表示从左向右取;如果为负数,表示从右向左取;步长不能为 0。

    1-200512135044346.png

    例,截取字符串   

>>> s = 'abcdef'
>>> s[2:] # 第2个字符到最后一个字符
'cdef'
>>> s[:] # 所有字符
'abcdef'
>>> s[2:4] # 第2个到第4个字符(不包含第4个)
'cd'
>>> s[2:1000] # 超过最大索引,截取到字符串末尾
'cdef'
>>>

    注意:s[:] 形式会忽略开始和结束索引,总是获得一个完整的副本。

    和使用索引类似,切片操作也可以使用反向索引:

>>> s = 'abcdef'
>>> s[-4:-1] # 第2个字符到最后一个
'cde'
>>> s[:-2] # 开始到第5个字符(不包含第5个)
'abcd'
>>> s[-4:] # 从第3个字符到字符串末尾
'cdef'
>>>

    对于任何索引 n,s[:n] + s[n:] == s 是一个整齐的切片,甚至对于负数或超出界限的值也是如此。换一种说法,s[:n] 和 s[n:] 总是将字符串分成两部分,来保存所有的字符。

    三、更改或删除字符串

    3.1 字符串是不可变的,也就是说,一旦分配了字符串的元素就不能被更改。

>>> s = 'Hello'
>>> s[1] = 'a'
Traceback (most recent call last):
  File "<pyshell#101>", line 1, in <module>
    s[1] = 'a'
TypeError: 'str' object does not support item assignment
>>>

    3.2 无法从字符串中删除字符,但是可以使用关键字 del 完全删除字符串。

>>> s = 'Hello'
>>> del s[0] # 从字符串删除字符
Traceback (most recent call last):
  File "<pyshell#105>", line 1, in <module>
    del s[0]
TypeError: 'str' object doesn't support item deletion


>>> del s # 完全删除字符串
>>> s
Traceback (most recent call last):
  File "<pyshell#107>", line 1, in <module>
    s
NameError: name 's' is not defined
>>>

欢迎分享交流,转载请注明出处:WithCoder » Python基本数据类型之字符串