Python中的字符串(str):
字符串是由零个或多个字符组成的有限序列(字符串是由Unicode码点组成的不可变序列)——使用单引号,双引号,三引号作为定界符,不同定界符之间可以互相嵌套;使用字母r,或R引导的表示原始字符串
例如:’swfu’ “I’student”
‘“Python is a great language”’, r’C:\Windows\notepad.exe’
字符串是一种序列,这意味着它具备序列类型都支持的操作: 以下的s、t皆表示序列,x表示元素
x in s # 若s包含x,返回True,否则返回False
s=’1,2,3’
x=’2’
print(x in s)
输出: True
x not in s # 若s包含x,返回False,否则返回True
s=’1,2,3’
x=’2’
print(x not in s)
输出: False
s + t # 连接两个序列
s=’1,2,3’
t=’2,4’
print(s + t)
输出: 1,2,32,4
s * n # s复制n次
s=’1,2,3’
print(s * 5)
输出: 1,2,31,2,31,2,31,2,31,2,3
s[i] # s的索引第i项
s=‘1 2 3’
print(s[2])
输出: 2
s[i:j] # s切片从第i项到第j-1项
s=‘1 2 3 4’
print(s[0:2])
输出: 1
s[i:j:k] # s切片从第i项到第j-1项,间隔为k
s=‘1,2,3,4’
print(s[0:6:2])
输出: 123
len(s) # s的长度
s=‘1,2,3,4’
print(len(s))
输出: 7
min(s) # s的最小元素
max(s) # s的最大元素
s=‘1,2,3,4’
print(max(s))
输出: 4
s.index(x) # x的索引位置
s=‘1,2,3,4’
print(min(s))
输出: ,
s.count(x) # s中出现x的总次数
s=‘1,2,3,4’
print(s.count(‘1’))
输出: 1
字符串序列是一种不可变序列,这意味着它不能像可变序列一能,进行就地修改:
a=“python”
b=“cat” + a
print(id(a)==id(b))
输出: False(布尔值:布尔只有两个值:0,1)
1或0
真或假
作为对比,列表可以就地改:
a=[“python”]
a.append(“cat”)
print(a)
输出:[‘python’,
‘cat’]
Unicode编码标准于1991年推出,至今迭代到了第11版,已经能够编码146个书写系统的130000个字符,可谓是无所不包,真不愧是“国际码”。Unicode编码其实是一个二进制字符集,它建立了从书写字符映射成唯一的数字字符的关系,但是,由于各系统平台对字符的理解差异,以及出于节省空间的考虑,Unicode编码还需要再做一次转换,转换后的新的二进制数字才能作为实际存储及网络传输时的编码。
这种转换方式被称为Unicode转换格式(Unicode Transformation Format,简称为UTF),它又细分为UTF-8、UTF-16、UTF-32等等方式。我们最常用的是UTF-8。为什么UTF-8最常用呢?因为它是可变长度的编码方案,针对不同的字符使用不同的字节数来编码,例如编码英文字母时,只需要一个字节(8个比特),而编码较复杂的汉字时,就会用到三个字节(24个比特)。
二进制的编码串可以说是给机器阅读的,为了方便,我们通常会将其转化为十六进制,例如“中”字的Unicode编码可以表示成0x4e2d ,其UTF-8编码可以表示为0xe4b8ad ,'0x’用于开头表示十六进制,这样就简洁多了。不过,UTF-8编码的结果会被表示成以字节为单位的形式,例如“中”字用UTF-8编码后的字节形式是\xe4\xb8\xad 。
Python中为了区分Unicode编码与字节码,分别在开头加“u”和“b”以示区分。在Python 3中,因为Unicode成了默认编码格式,所以“u”被省略掉了。
字符转Unicode编码(python3中,开头U被省略,b不可省略)
print(hex(ord(‘中’)))
print(hex(ord(‘A’)))
输出:
0x4e2d
0x41
字符转UTF-8编码(encode)
print(‘中’.encode(‘utf-8’))
print(‘A’.encode(‘utf-8’))
输出:
b’\xe4\xb8\xad’
b’A’
Unicode编码还原成字符
print(chr(0x4e2d))
print(chr(0x41))
输出
中
A
UTF-8编码还原成字符(decode)
print(b’\xe4\xb8\xad’.decode(‘utf-8’))
print(b’A’.decode(‘utf-8’))
输出:
中
A
字符串的应用:
切片:(切片规则:s[start?step]
从start开始到end-1结束,步长为step)
显示所有字符 print s[:]
s=‘1 2 3 4 5 6’
print(s[:])
输出: 1 2 3 4 5 6
显示前3个字符
print s[:3]
s=‘1 2 3 4 5 6’
print(s[:3])
输出: 1 2
对字符串倒序输出 print
s[::-1]
s=‘1 2 3 4 5 6’
print(s[::-1])
输出: 6 5 4 3 2 1
除第一个字符外,其余全部显示 print s[1:]
s=‘1 2 3 4 5 6’
print(s[1:])
输出: 2 3 4 5 6
字符串开头和结尾匹配:
s=‘xiao.xin’
print (s.endswith(’.xin’)) #找出以.xin结尾
输出: True
s=‘xin,jiang’
print(s.startswith(‘xiao’))
输出: False
a = input(“请输入文件名:”)
if a.endswith(".xin"):
print(a)
else:
print("error file")
输出: xiao xin
判断字符串中的每个字符是否为特定类型
有一个字符不满足,便返回false
s为字符串
s.isalnum() 所有字符都是数字或者字母
s.isalpha() 所有字符都是字母
s.isdigit() 所有字符都是数字
s.islower() 所有字符都是小写
s.isupper() 所有字符都是大写
s.istitle() 所有单词都是首字母大写,像标题
s.isspace() 所有字符都是空白字符、\t、\n、\r
判断是整数还是浮点数
a=12
b=12.1
print(isinstance(a,int))
print(isinstance(b,float))
print(isinstance(b,int))
输出:True True Flase
print(“Hello”.istitle())
print(“hellow”.istitle())
print(“HelloWorld”.istitle())
输出:
True
False
False
Python中str函数isdigit,isdecimal,isnumeric的区别:
num = “1”
#unicode
num.isdigit() # True
num.isdecimal()#
True
num.isnumeric() #
True
num = “1” # 全角
num.isdigit() #
True
num.isdecimal() # True
num.isnumeric() #
True
num = b"1" # byte
num.isdigit() #
True
num.isdecimal() #
AttributeError ‘bytes’ object has no attribute ‘isdecimal’
num.isnumeric() #
AttributeError ‘bytes’ object has no attribute ‘isnumeric’
num =
“IV” # 罗马数字
num.isdigit() #
True
num.isdecimal() # False
num.isnumeric() #
True
num = “四” # 汉字
num.isdigit() # False
num.isdecimal() # False
num.isnumeric() #
True
num = ‘1’
print(num.isdigit())
输出: True
索引:(不可以越界)
s=“12345”
print(s[5])
输出: raceback (most recent call last):
File “D:/Program Files
(x86)/untitled/three.py”, line 2, in
print(s[5])
IndexError: string index out
of range
反向索引:
s=“xiao,xin”
print(s[-1])
print(s[-2])
输出:
n
i
字符串连接:
print(“xiao” + “xin”)
print(‘xiao’ “xin”)
print(“xiao”,“xin”)
输出:
xiaoxin
xiaoxin
xiao xin
字符串列表连接 str.join(list):
函数join接受一个列表,然后用字符串连接列表中的每一个元素:
a = [“xiaoxin”,“xiaokui”,“meiya”,“guangzhi”]
team = ‘xiaobai’
print(team.join(a))
输出: xiaoxinxiaobaixiaokuixiaobaimeiyaxiaobaiguangzhi
%连接字符串:
a=“xiao”
b=“xin”
print("%s%s"%(a,b))
输出: xiaoxin
字符串转化:
lower(转化为小写字母),upper(转化为大写字母),title(转化为标题),swapcase(大小写字母相互转化),capitalize(首字母大写,然后其他变小写)
print(“hello”.upper())
print(“heLlo”.lower())
print(“heLlo”.title())
print(“heLlo”.swapcase())print(“helLo”.capitalize())
输出:
HELLO
hello
Hello
HElLO
Hello
字符串的搜索和替换:
find:检查字符串中是否包含字符串
replace:用新字符new替换字符串中的字符old。如果指定第三个参数max,则替换不超过max次。
count:统计字符串中某字符出现的次数
s = “xiao xin , xiao kui”
print(s.find(‘xiao’))
print(s.rfind(‘xiao’)
输出:
0
11
s = “xiao xin , xiao kui”
print(s.replace(‘kui’,‘bai’))
输出: xiao xin , xiao
bai
s = “xiao xin , xiao kui”
print(s.replace(‘xiao’,‘yeyuan’))
输出: yeyuan xin , yeyuan kui
s = “xiao xin , xiao kui”
s1=s.replace(‘xiao’,‘yeyuan’)
print(s1)
print(s)
输出:
yeyuan
xin , yeyuan kui
xiao
xin , xiao kui
s=“xiao xin , xiao kui”
print(s.count(“xiao”))
print(s.count(“x”))
print(s.count(“b”))
输出:
2
3
0
字符串中的分离和拼接:
Split:通过制定分隔符对字符进行分割,如果,参数num有指定值,仅分割num个字符串
Join:将序列中的元素与指定的字符串连接成一个新的字符串
a = “112.251.235”
print(a.split(’.’))
输出: [‘112’,
‘251’, ‘235’]
a = “2019-8-15”
print(a.replace(’-’,’/’))
输出: 2019/8/15
a = [‘小’,‘新’]
print("".join(a))print(“*”.join(a))
输出:
小新
小*新
去掉两边空格(空格为广义的
空格,包括:\n,\t,\r):
Strip: 去掉两边空格
Letrip: 去掉左边空格
Rstrip: 去掉右边空格
s = “\nxiaoxin\n”
print(s.lstrip())
print(s)
print(s.strip())
print(s.rstrip())
输出:
xiaoxin
xiaoxin
xiaoxin
xiaoxin