1.字符串
①编码格式
UTF-8是国际通用的编码,以一个字节表示英语字符(兼容ASCII),以三个字节表示中文及其他语言,对所有国家需要使用的字符进行了编码。
GB2312/GBK是我国制定的中文编码标准,使用一个字节表示英语,两个字节表示中文。
CP936是微软公司在GBK基础上开发的编码方式。
Unicode是不同编码风格之间相互转换的基础。
可以用显式声明编码格式:
#coding=utf-8
#coding:GBK
#-*-coding:utf-8-*-
#Python3.x默认编码为UTF-8
②Python版本对中文的支持不同
Python2.x对中文支持不够,因此需要在不同编码之间转换;Python3.x完全支持中文,包括变量。
③字符串属于不可变序列类型,使用单引号、双引号、三单引号或三双引号作为界定符,并且不同界定符之间可以相互嵌套。字符串可以有常见的序列通用方法(包括比较,计算长度,元素访问,分片)以及特有的操作(格式化操作,字符串查找,字符串替换等),但字符串属于不可变序列,即不能修改原有字符串,但是可以通过replace()、translate()方法来修改字符串(变成新的字符串)然后赋值给变量。
a)字符串驻留机制:
短字符串有驻留机制,长字符串不符合
a='1234'
b='1234'
id(a)==id(b) #True
a=a*50
b=b*50
id(a)==id(b) #False
在Python2.x中字符串有str和unicode两种格式,其基类都是basestring,在Python3.x中只有str类型,字符串对象不再支持decode()方法
#Python 2.x中字符串
type('中国')
<type 'str'>
type('中国'.decode('gbk'))
<type 'unicode'>
#Python 3.x中字符
type('中国')
<type 'str'>
type('中国'.encode('gbk'))
<class 'bytes'>
④字符串格式化
格式:
'% [-] [+] [0] [m] [.n] 格式字符'% x
#第一个%:格式标志,表示格式开始
#第一个中括号:指定左对齐输出
#第二个中括号:对正数加+号
#第三个中括号:指定空位填0
#第四个中括号:指定最小宽度
#第五个中括号:指定精度
#格式字符:指定类型,见下表
#第二个%号:格式运算符
#x:带转换的表达式
#格式字符有
%s #字符串(采用str()的显示)
%r #字符串(采用rper()的显示)
%c #表示单个字符
%% #表示%
%d/%i/%o/%x #分别表示十进制数/十进制整数/八进制整数/十六进制整数
%e/%E #分别表示基底为e/E的指数
%f/%F #表示浮点是
%g/%G #分别表示基底为e/E的指数或浮点数(根据显示长度选择)
#例子:
x=1235
so="%o"%x #将x转换为八进制数
>>>"2323"
"%s"%65 #作用类似于str()
>>>65
'%d,%c'%(65,65) #使用元组对字符串进行格式化,按位置对应
>>>'65,A'
建议使用format()函数来进行字符串的格式化,该方法不仅使用位置进行格式化,还支持使用与位置无关的参数名字来进行格式化,并且支持序列解包格式化字符串
print("The number {0:,} in hex is: {0:#x}, the number {1} in oct is {1:#o}".format(5555,55))
>>>The number 5,555 in hex is: ox15b3,the number 55 in oct is 0o67
⑤字符串常用方法:
s='1,2,3'
#查找
s.find('1') #返回第一次出现的位置
s.find('1',0,2) #指定范围查找
s.rfind('2') #倒叙查找
s.index('2') #返回首次出现位置
s.count('1') #统计字符串出现次数
#分割
s1=s.split(",") #使用‘,’分隔开字符串
>>>s1
>>>['1','2','3']
>s2=s.partition(',') #用来指定字符串为分隔符将元字符划分为3部分
>>>s2
>>>('1',',','2,3')
#split()和rsplit()函数可以指定最大分割次数
#连接
s3=['1','2','3']
sep=","
s=sep.join(s3) #'+'也可以实现字符串连接,但效率较低
>>>s
>>>"1,2,3"
#字符转换
upper() #全部字母大写
lower() #全部字母小写
capitalize() #首个单词字母大写
title() #单词首字母大写
swapcase() #与title()相反
replace(n,m) #n表示原来字符串,m表示替换字符串
maketrans()/translate() #前者用来生成字符替换表,后者实现替换
table=''.maketrans("abcd","1234") #将abcd对应转换为1234
s="abcd56"
s.translate(table)
>>>"123456"
#删除
strip() #删除空白字符
strip("a") #删除指定字符
rstrip("a") #删除字符串右端指定字符
rstrip("a") #删除字符串左端指定字符
#将字符串转换为表达式求值
eval("3+4")
>>>7
#in 关键字 返回True 或者False
startswith()/endswith() #分别判断字符串开始字符和结束字符是否为指定字符
#判定字符类型
isalnum() #判断是否为数字
isalpha() #判断是否为字母
isdigit() #判断是否为数字字符
isspace() #判断是否为空格
isupper() #判断是否为大写
islower() #判断是否为小写
#修改字符串样式
center(n,'m') #n表示设置新字符串长度,m表示填充字符,m可以省略,默认为空格
ljust() #居左
rjust() #居右
⑥字符串常量
import string
string.digits #数字
string.punctuation #标点符号
string.letters #英文字母
string.printtable #可打印字符
string.uppercase/string.lowercase #大写字母/小写字母
#随机密码生成案例
import string
x=string.digits+string.ascii_letters+string.punctuation
import random
''.join(random.choice(x) for i in range(8))
''.join(random.sample(x,8))
#random库
getrandbits() #指生成定二进制数的随机整数
randrange() #指定随机范围的随机数
randint() #指定类型的随机数
sample() #指定数量且不重复的随机数
betavariate() #返回[0,1]区间符合beta分布
gammavarrate() #返回gamma分布
guass() #返回guass分布
⑦可变字符串
可以使用io.StringIO或array模块实现原地修改字符串
import io
s="Hello"
sio=io.toStringIO(s)
sio.getvalue()
>>>"Hello"
sio.seek(2)
>>>2
>>>sio.write("N")
>>>sio.getvalue()
>>>HeNlo #方法一
import array
a=array.array('u',s)
print(a,end='')
>>>array('u','Hello')
a[0]='y'
print(a)
>>>array('u','yello')#方法二
⑧字符串应用案例
#1实现字符串加密(通过异或算法)
def crypt(source,key):
from itertools import cycle
result=''
temp=cycle(key)
for ch in source:
result=result+chr(ord(ch)^ord(next(temp)))
return result
source='He'
key='She'
print('Before Encrypted:'+source)
encrypted=crypt(source,key)
print('After Encryped:'+encryped)
decryped=crypt(encrypted,key)
print('After Decrypted:'+decrypted)
Python选择结构与循环结构参看文章:
https://blog.csdn.net/qxyloveyy/article/details/104447365