字符串类型是编程语言里非常重要的数据类型,因为几乎所有的程序主要做的事情就是处理字符串,这个随着大家的学习会有深入的体会。 ## 字符串的定义 python中字符串(str)是使用单引号,双引号,三引号包裹起来的字符的序列,用来表示文本信息。 ```python >>> a = 'a' # 单引号 >>> b = "bc" # 双引号 >>> print(type(a), type(b)) <class 'str'> <class 'str'> ``` 使用单引号和双引号进行字符串定义没有任何区别。 当单引号是字符串的一部分时用双引号定义字符串,反之亦然。 但个人建议一般情况下使用单引号定义字符串,因为不需要按`shift`键,方便。当然用双引号也没有什么不好,但尽量保持一致。 ```python >>> print('我最近看了"平凡的世界"') 我最近看了"平凡的世界" >>> print("我最近看了'平凡的世界'") 我最近看了'平凡的世界' ``` 一对单引号或双引号只能定义单行字符串,三引号可以用来创建多行表示的字符串。 ```python >>> content = '''窗前明月光,疑是地上霜; 举头望明月,低头思故乡。''' >>> print(content) 窗前明月光,疑是地上霜; 举头望明月,低头思故乡。 ``` 三单引号和三双引号也没有本质区别。三双引号一般用来做多行注释,函数,类定义时的说明文档。 ```python """ 我是多行注释 函数,类定义的说明文档 后面我们再说 """ ``` 字符串还有一个很重要的概念`空字符串`,表示字符串中没有任何字符,定义如下: ```python >>> a = '' >>> print(a) ``` 直接写两个引号,中间没有空格,打印时没有任何显示。空字符串的概念非常重要,用来表示文本输出为空。 ## 字符串的索引 序列类型中的元素都用`索引`来表示它在序列中的位置。 单个字符在字符串中的位置叫`索引`,也叫`下标`。 ![1659343896765](https://wcflove.gitee.io/images/1659343896765.png) 索引是从0开始的整数序列,0表示字符串的第一个位置,以此类推。 通过索引可以获取字符串中的单个字符,语法如下: ```bash str[index] ``` ```python >>> s = 'Hello,world!' >>> print(s[0]) H ``` 索引还可以使用负数表示,`-1`表示倒数第一个字符,`-2`表示倒数第二个字符,以此类推。 ```python >>> s = 'Hello,world!' >>> print(s[-1]) ! >>> print(s[-2]) d ``` ## 字符串的切片 获取序列中的子序列叫切片。 字符串的切片就是获取字符串的子串。字符串切片的语法如下: ```bash str[start:end:step] ``` - `start`表示切片的开始索引,在切片的结果中包含开始索引的字符 - `end`表示结束索引,在切片的结果中不包含结束索引的字符 - `step`是步长,表示每隔几个字符切片,当步长为1是可以省略。 看下面的案例: ```python >>> s = '012345678' >>> print(s[1:5]) # 包头不包尾 1234 ``` 从头开始切片可以省略`start` ```python >>> print(s[:5]) 01234 ``` 切到末尾包含末尾可以省略`end` ```python >>> print(s[1:]) 12345678 ``` 当步长不为1时 ```python >>> print(s[1::2]) 13579 ``` 特别的,当步长为负数时,表示反向切片,切片会从后往前进行,例如: ```python >>> print(s[1::-1]) 10 >>> print(s[9::-1]) 876543210 ``` ## 字符串拼接 python中序列可以进行加法运算实现拼接。所以字符串可以通过`+`进行拼接: ```python >>> a = 'hello' >>> b = ' ' >>> c = 'world!' >>> print(a+b+c) hello world! ``` 既然可以加法运算,那么一般也可以和整数进行乘法运算,实现重复拼接的效果: ```python >>> print('*' * 10) ********** ``` ## 字符串和数值的相互转化 `1`和`'1'`不同,`1.2`和`'1.2'`也不相同,但是它们可以相互转化。 整数和字符串之间的转化 ```python >>> int('1') # 整数字符串转化为整数 1 >>> str(1) # 整数转化为字符串 '1' ``` 浮点数和字符串之间的转化 ```python >>> float('1.2') 1.2 >>> str(1.2) '1.2' ``` 将数值字符串转化为对应的数值类型时,格式一定要正确,否则会抛出异常 ```python >>> int('1.2') # '1.2'不是整数字符串运行会抛出异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1.2' ``` 注意:如果你用`print`函数打印整数和整数字符串输出形式是一样的。 ```python >>> print(1) 1 >>> print('1') 1 ``` ## 转义符 除了可见字符外,还有很多不可见的特殊字符,例如回车,换行,制表符等。这些字符是通过反斜杠`\`和其他字符组合来表示,称为`转义`,所以`\`也称为转义符。常见的转义字符如下表: | 组合 | 符号 | | :--- | :--------- | | `\\` | 反斜杠符号 | | `\'` | 单引号 | | `\"` | 双引号 | | \a | 响铃 | | \n | 换行 | | \t | 横向制表符 | | \r | 回车 | | \f | 换页 | ```python >>> print('窗前明月光,\n疑是地上霜。') # 输出换行 窗前明月光, 疑是地上霜。 >>> print('\'') # 输出单引号本身 ' ``` 其他的转义字符大家可以自行练习。 可以通过前导符`r`,强制不转义将字符串原样输出: ```python >>> print(r'窗前明月光,\n疑是地上霜。') # 不转义 窗前明月光,\n疑是地上霜。 ``` ``` 再给大家分享一个学习小技巧,我以前分不清正斜杠和反斜杠。直到有一天,撇`/`就是正,捺`\`就是反。 是不是秒记。 嘿嘿,不用谢! ```