Python字符串类型的操作

来自CloudWiki
跳转至: 导航搜索

字符串类型的操作

字符串操作符

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()

 >>> 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编码


字符串处理方法

方法也是一个函数,只是调用方式不同。

方法与函数的对比:

  • 函数采用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))