Python字符串类型的操作
字符串类型的操作
字符串操作符
python提供了五个字符串的基本操作符,如:
- x + y 连接两个字符串x与y
- x * n 或 n * x 复制n次字符串x
- x in s 如果x是s的子串,返回True,否则返回False
x+y
- Python字符串支持加法运算符,表示两个字符串连接,生成新字符串。
>>> 'hello ' + 'world' 'hello world'
x in s
- 成员判断,关键字in
>>> "a" in "abcde" #测试一个字符中是否存在于另一个字符串中 True >>> 'ab' in 'abcde' True >>> 'ac' in 'abcde' #关键字in左边的字符串作为一个整体对待 False >>> "j" in "abcde" False
- 例子:
NameList ="张明 王乐 刘全全 谭虎" name = "王乐" if "王乐" in NameList: print(name+"在名单之中") else: print(name+"不在名单之中")
x * n 或 n * x
- Python字符串支持与整数的乘法运算,表示序列重复,也就是字符串内容的重复,得到新字符串。
>>> 'abcd' * 3 'abcdabcdabcd'
str[i]
- str[i],索引,表示第i个字符
>>> name = input("请输入名称:") 请输入姓名:山东商业职业技术学院 >>> name[0] '山'
str[N:M]
- str[N:M]切片,返回索引第N到M的子串,其中不包含M
- 例:截取身份证号第X位数字
>>> name = input("请输入名称:") 请输入姓名:山东商业职业技术学院 >>> name[2:4] '商业' >>> name[4:6] '职业'
字符串处理函数
python解释器提供了一些内置函数,处理字符串呢,非常方便。
- len(x) 返回字符串x的长度,也可返回其他组合数据类型的元素个数
- str(x) 返回任意类型x所对应的字符串形式
- chr(x) 返回Unicode编码x对应的单字符
- ord(x) 返回单字符x表示的Unicode编码
- hex(x) 返回整数x对应十六进制数的小写形式字符串
- oct(x) 返回整数x对应八进制数的小写形式字符串
len(),max(),min()函数
>>> x = 'Hello world.' >>> len(x) #字符串长度 12 >>> max(x) #最大字符 'w' >>> min(x) ' '
str()函数
- str(x) 返回任意类型x所对应的字符串形式
>>> x=3.1415 >>> str(x) #返回x的字符串形式。 '3.1415'
例: 整数和字符串的连接
>>> print("hello"+123) Traceback (most recent call last): File "<pyshell#47>", line 1, in <module> print("hello"+123) TypeError: can only concatenate str (not "int") to str >>> print("hello"+str(123))
ord() ,chr()
- python3以Unicode为编码单位,因此中英文字符都是1个长度单位。
- 延伸阅读:https://baike.baidu.com/item/Unicode/750500?fr=aladdin
>>> ord('a')#返回某个字符所表示的Unicode编码。 97 >>> chr(97) 返回Unicode编码对应的单字符 >>> chr(10000) '✐'
练习:试着打印一下chr(9000),chr(9001),。。。chr(9999)看看出现什么结果 ?
bin(),hex(),oct()函数
- 16进制、八进制等的相互转换:
>>> x=7 >>> bin(x) #返回整数x对应的二进制字符串型。 '0b111' >>> x= 11 >>> hex(x)#返回整数x对应的16进制字符串型。 '0xb' >>> oct(x)#返回整数x对应的八进制字符串形式。 '0o13'
- 例题:打印英文26个字母的Unicode编码
str1='abcdefghijklmnopqrstuvwxyz' for i in range(0,26): print(ord(str1[i]))#打印26个字母对应的Unicode编码
- 扩展:电报的编码与解码 https://www.qqxiuzi.cn/bianma/dianbao.php
字符串处理方法
方法也是一个函数,只是调用方式不同。
方法与函数的对比:
- 函数采用func(x)方式调用,
- 而方法则采用<a>.func(x)形式调用。方法仅作用于前导对象<a>
常用方法:
- str.lower() 返回字符串str的副本,全部字符小写
- str.upper() 返回字符串str的副本,全部字符大写
- str.split(sep=None) 返回一个列表,由str根据sep被分割的部分构成
- str.count(sub) 返回sub子串出现的次数
- str.replace(old, new) 返回字符串str的副本,所有old子串被替换为new
- str.center(width, fillchar) 字符串居中函数,fillchar参数可选
- str.strip(chars) 从字符串str中去掉在其左侧和右侧chars中列出的字符
- str.join(iter) 将iter变量的每一个元素后增加一个str字符串
大小写转换
>>> s = "Hello World" >>> s.lower() 'hello world' >>> s.upper() 'HELLO WORLD'
判断字符串类型
判断字符串中字符的类型:
- isdecimal() :如果字符串中只包含十进制数字则返回True,否则返回False
- isdigit() :如果字符串中只包含数字则返回True,否则返回False
- isnumeric() :如果字符串中只包含数字则返回True,否则返回False
- isalpha() :如果字符串中至少有一个字符,并且所有字符都是字母则返回True,否则返回False
- isalnum() :如果字符串中至少有一个字符,并且所有字符都是字母或数字则返回True,否则返回 False
>>> s="1234567" >>> print(s.isnumeric()) True >>> print(s.isdigit()) True >>> p="hello123" >>> print(p.isdigit()) False >>> print(p.isnumeric()) False
从字符串中搜索子串
str.index(sub, start=None, end=None)
作用:查看sub是否在字符串中,在的话返回索引,且只返回第一次匹配到的索引;若找不到则报错;可以指定统计的范围,[start,end) 左闭区间右开区间
str.find(sub, start=None, end=None)
作用:和index()一样,只是找不到不会报错,而是返回-1
>>> s="华为 Nova手机" >>> s.find("华为") 0 >>> s.index("华为") 0 >>> s.find("小米") -1 >>> s.index("小米") Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> s.index("小米") ValueError: substring not found >>>
判断字符串的前缀和后缀
startswith(prefix, start=None, end=None):判断字符串前缀
endswith(suffix, start=None, end=None):判断字符串后缀
>>> s.startswith("华为") True >>> s.endswith("手机") True
字符串分割
str.split(sep) 能够根据sep分隔字符串str,分割后的内容以列表类型返回。
如果sep省略,则默认按空格分割。
>>> p = "Python is an excellent language" >>> p.split() ['Python', 'is', 'an', 'excellent', 'language'] >>> p.split('a') ['Python is ', 'n excellent l', 'ngu', 'ge'] >>> p.split('an') ['Python is ', ' excellent l', 'guage']
split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。 语法
str.split(str="", num=string.count(str))
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数。默认为 -1, 即分隔所有。
例:
>>> info ='root:123456:/etc/nginx' >>> a =p.split(':') >>> a ['Python is an excellent language'] >>> a =info.split(':') >>> a ['root', '123456', '/etc/nginx'] >>> a[0] 'root' >>> a[1] '123456' >>> a[2] '/etc/nginx'
统计某个字符出现的次数
str.count(sub)方法返回字符串str中出现sub的次数,sub是一个字符串
>>> p.count('a') 3 >>> p.count('an') 2 >>> p.count('') 32 >>> p.count(' ') 4
思考:给出一段话,统计这段话中某个词出现的次数。
字符串替换
str.replace(old, new)方法将字符串str中出现的old字符串替换为new字符串,old和new的长度可以不同
>>> p.replace('a','#') 'Python is #n excellent l#ngu#ge' >>> p 'Python is an excellent language' >>> p.replace('Python','C') 'C is an excellent language' >>>
练习:给出一个文本文件,将里面的user01全部替换为user02
填充与去除
str.center(width, fillchar)方法返回长度为width的字符串,
其中,str处于新字符串中心位置,两侧新增字符采用fillchar填充,
当width小于字符串长度时,返回str。其中,fillchar是单个字符。
>>> print("Python".center(20, "=")) =======Python======= >>> print("Python".center(2, "=")) Python
str.strip(chars)从字符串str中去掉在其左侧和右侧chars中列出的字符。
chars是一个字符串,其中出现的每个字符都会被去掉。
>>> print(" ==Python== ".strip(' ')) ==Python== >>> print(" ==Python== ".strip(' =') ) Python >>> print(" ==Python== ".strip(' =n')) Pytho
例题:
>>> d="张三 " >>> d2 =d.strip(" ") >>> d2 =="张三" True >>> d =="张三" False
连接与聚合
str.join(iter)中iter是一个具备迭代性质的变量,
该方法将str字符串插入iter变量的元素之间,形成新的字符串。
>>>" ".join('PYTHON') 'P Y T H O N' >>>",".join('12345') '1,2,3,4,5' >>>",".join(['1', '2', '3', '4', '5']) '1,2,3,4,5'
案例:过滤敏感词
需求
敏感词一般是指带有敏感政治倾向(或反执政党倾向)、暴力倾向、不健康色彩的词或不文明用语,论坛、网站管理员一般会设定一些敏感词,以防不当发言影响论坛、网站环境。若论坛、网站设置了敏感词,用户编辑的内容又含有敏感词,论坛和网站会将其判定为不文明用语,阻止内容的发送,或使用“*”替换其中的敏感词。下面将使用Python程序实现过滤敏感词的功能。
分析
实现过滤敏感词功能的思路是:首先设定敏感词库,之后对用户输入的语句进行检查,如果其中包含敏感词库中的词汇,通过replace()方法使用“*”替换敏感词。
应用
统计单词的数量
描述
输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。
输入
一个英文句子
输出
一个整数,单词数量
输入输出示例
输入 输出 示例 1 Life is short, you need Python! 6
代码
#约定字符串的单词之间用空格分隔,标点符号后跟一个空格 s = input() ls = s.split() print(len(ls))