在编程语言的数据类型学习中,字符串绝对是学习的重点知识。在python中,字符串绝对算得上是核心操作。举个很简单的例子:我们在编写程序时输入内容时便是以字符串的形式进行输入!!!
那么这次,我把字符串放在别的框架下 —— 组合数据类型
如果你对python有过基本的学习或了解,你就会明白组合数据类型比较常用。组合数据类型又分为(序列类型、集合类型、字典)三大类,而其中的序列类型又包括 最基本 的三种序列类型(不是只有三种)(列表类型、元组类型、字符串类型)。其中,你已经找到了字符串类型的位置。
搞明白了字符串类型的归属,我们来总结下对字符串数据类型的操作和功能:
第一:创建字符串
字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。
a = '2'
b = "2"
c = 'abc123'
d = "a1bcd"
第二:字符串不可更改性
在这里,我们要强调,当你创建过一个字符串后,你在对这个字符串操作时不要妄想改变字符串中的某部分,因为字符串本身是不可修改的(那么在之后的几个操作你认为的改变了其实本质上都只是复制了而不是对原本的变更)
第三:转义字符串(常用常见的)
参数 | 详细解释 |
---|---|
\ | 续航符(语句未输入完为了避免一行输入太多续航) |
\n | 换行 |
\t | 横向制表符 |
\v | 纵向制表符 |
\r | 退回本行行首 |
\e | 转义 |
\" | 双引号 |
\a | 响铃 |
\b | 退格 |
\000 | 空 |
\f | 换页 |
第四:常用字符串运算符(关键性操作)
参数 | 详细解释 |
---|---|
in | 判断是否存在于字符串内,返回True或False |
not in | (对比就好,无须多说) |
+ | 字符串连接 |
* | 复制并输出n次(str*n) |
[] | 索引(获得字符串中的片段) |
[m:n:k] | 索引的高级形式(m代表起始点,n代表结束点,k代表步长) !!!注意,在python中,字符串起始位置为0,但倒序时起始位置为-1,大多数编程语言的索引都是这个规则,详情参照下边关于索引的讲解 |
% | 格式字符串 |
第五:字符串的“格式化”(方法之一)
.format方法:在入门python时建议使用format方法,该方法简单易懂且更加只管清晰固定化(编写的美观性也很高)。当然,如果你曾经使用的编程语言是c,也可以融汇贯通python内的另一种格式化方法——“%”。
首先,就像认识事物,我们最开始了解便是他的整体外观(印象),那么字符串format格式化方法的外观是这样的:
print('{}'.format()) #重点在于那个“{}”里的参数
我们已经看到了外观,大概的意思是,我们输出format()里的对应变量,怎么输出,怎么样的格式输出呢?这就是“{}”里要控制的了——我们在“{}”里增加各种各样的参数来控制。就好比我们捏泥人,首先确定捏谁(变量),接着我们捏具体的五官啊、发型啊、形态啊就是我们要求的格式(“{}”里的参数管)。接下来我们介绍参数:
在“{}”里,也是有顺序的!
{<参数序号> : <格式控制标记>}
其中,<格式控制标记>用来控制参数显示时的格式,格式内容如下所示(后边会举例子方便理解):
: | <填充> | <对齐方式> | <宽度> | , | <精度> | <类型> |
---|---|---|---|---|---|---|
冒号前的数字表示填充顺序 | 引导符号用于填充的单个字符 | “<”代表左对齐,“>”代表右对齐,“^”代表居中对齐 | 设定输出宽度 | 数字的千分位分隔符(适用于整数和浮点数) | 浮点数小数部分的精度 | 整数类型b,c,d,o,x,X;浮点数类型e,E,f,% |
下面举两个例子:
1. 对齐等格式
a = 10
print("*填充,居中对齐,宽度设为20的输出为:{:*^20}".format(a))
运行结果如下:
2. 精度与输出顺序
a = 10.56412231
b = 9.212311
c = 8.311331
print("填充顺序及精度的展示:b = {1:.3f},c = {2:.0f},a = {0:.05f}".format(a,b,c))
运行结果如图:
第六:字符串方法(此“方法”非彼方法)
6.1 字符串的类型判断
- str.isdigit() 是否全为数字(0-9)
- str.isdecimal() 是否只包含十进制数字字符
- str.isnumeric() 是否全为数字
对于非Unicode字符串,上述三个方法是等价的。
- str.isalpha() 是否全为字母
- str.isalnum() 是否全是字母或数字
- str.islower() 是否全为小写
- str.isupper() 是否全为大写
- str.istitle() 是否是标题(即各单词首字母大写)
注意,istitle()判断时会对每个单词的首字母边界判断。例如,word1 Word2、world1_World2、world1()World2中都包含两个单词,他们的首字母是“w”和“W”。因此,如果用istitle()去判断它们,将返回False,因为w是小写。
- str.isspace()
- str.isidentifier()
- str.isprintable()
6.2 字符串大小写转换
- str.lower() 全部字母小写
- str.upper() 全部字母大写
- str.capitalize() 首字母大写
- str.title() 各单词首字母大写
- str.swapcase() 大小写字母转换
- str.casefold() 转为大小写无关字符串比较的格式字符串
6.3 字符串的填充与对齐
- str.center(width[, fillchar])
- str.ljust(width[, fillchar])
- str.rjust(width[, fillchar])
ljust()使用fillchar填充在字符串S的右边,是的整体长度为width。rjust()则是填充在左边。如不指定fillchar,则默认是用空格填充。如width小于或等于S的长度,则无法填充,直接返回S
-
str.zfill(width) 前方补零
-
str.expandtabs([tabsize])
6.4 字符串的修剪
- str.strip([chars]) 不指定左右,同时移除
- str.lstrip([chars])
- str.rstrip([chars])
如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)
唯一需要注意的是:chars可以是多个字符序列。在移除时,只要这个序列中的字符,都会被移除。
6.5 字符串的测试与查找
- str.startswith(prefix[, start[, end]])
- str.endswith(suffix[, start[, end]])
endswith()用于检查字符串str是否以suffix结尾,返回布尔值的True和False,suffix可以是一个元组(tuple),可以是指定起始start和结尾end的搜索边界。
同理,startswith()用来判断str是否以profix开头
- str.count(sub[, start[, end]])
- str.find(sub[, start[, end]])
- str.rfind(sub[, start[, end]])
- str.index(sub[, start[, end]])
- str.rindex(sub[, start[, end]])
针对于字符串sub出现的次数、位置(从左开始或从右开始进行查找)
6.6 字符串的替换
- S.replace(old, new[, count]])
- S.expandtabs(N)
- S.translate(table)
- static str.maketrans(x[, y[, z]])
6.7 字符串的拆分和组合
- S.split(sep=None, maxsplit=-1)
- S.rsplit(sep=None, maxsplit=-1)
- S.splilines([keepends=True])
- 都是用来分割字符串,并生成一个列表。
- split()根据sep对S进行分割,maxsplit用于制定分割次数,如果不指定或者给定值为“-1”,则会从左向右搜索并且每遇到sep一次就分割知道搜索到字符串。如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩成一个空格
- rsplit()和split()一样,只不过是从右边向左
- splitlines()专门用来分割换行符,若指定为True,则保留换行符。
- S.partition(sep)
- S.rpartition(sep)
搜索字符串中的字串sep,并从sep处对S进行分割,最后返回一个包含3元素的元组(如找不到sep,则返回中有两个为空)
- S.join(iterable)
将可迭代对象中的元素用S连接起来。注意,iterable中必须全是字符串类型。