许多知识学了又忘,忘了又学,这次写成博客,当做学习笔记了,时常复习。
概念
序列:由其它对象组成的有序集合。字符串可以看做是单字符的字符串组成的序列,按照从左到右的顺序。
不可变对象:字符串一旦定义,则不会被改变,每次对字符串的更改操作实际是生成了新的字符串指向变量。
操作
s1 = 'abc' ;s2 = 'def'
s1+s2 = 'abcdef';s1*2 = 'abcabc'
创建
+,*
s = 'abc'
abc
单引号创建s = "abc"
abc
双引号创建s = 'a"b"c'
a"b"c
中间插入引号s = """abc"""
abc
三引号创建s = 'abc''def'
abcdef
不加,自动拼接
s = 'abc','def'
('abc', 'def')
加了,变元组
6.s = str()
强制类型转换
转义字符
转义字符的长度认为是一个字符。即len('\na') = 2
转义字符 | 意义 |
---|---|
\(在末尾时) | 续行符 |
\ | 反斜杠\ |
\’ | 单引号 |
" | 双引号 |
\n | 换行 |
\b | 退格 |
\a | 响铃,得在命令行才会响 |
\t | 横向制表符 |
\v | 纵向制表符 |
\r | 回车 |
\f | 换页 |
\0或者\000 | 空 |
\0yy | 八进制 |
\xyy | 十六进制 |
字符串前加u,b,r
s = u'xxx'
加u表示unicode编码
s = b'xxx'
加b表示ASCII码
s = r'xxx'
加r防止转义
方法
迭代
s = 'abc'
for i in s:
print(i,end=' ')
>>>a b c
s = 'abcde'
print('abc'in s)
print('aac'in s)
>>> True False#in的结果返回布尔值
索引,切片
切片
s[start : end : step]
start缺省值为0
,即从头开始
end缺省值为len(s)
即到结尾
step缺省值为 1
s = 'abc123'
print(s[1],s[-3],s[-6])
>>>b 1 a#索引可以正序倒序
s = 'abc123'
print(s[:],s[3:],s[:3],s[:-1],s[::2])
>>>abc123 123 abc abc12 ac2
.mothod
方法 | 作用 | 备注 |
---|---|---|
s.capitalize() | 实现首字母大写,其余变成小写 | made IN CHina >>> Made in china |
s.casefold() | 转化为小写,对德语等也有效 | |
s.center() | 字符串居中 | s.center(width[, fillchar]) fillchar缺省值为空格 |
s.count() | 统计 | s.count(substr[,start, end]) ;start>end会返回0,不会抛出异常s.count('')=len(s)+1 ;start,end可以为负数。 |
s.encode() | 以指定方式编码,返回bytes 类型 |
s.encode([encoding][,errors]) encoding默认为utf-8 |
s.decode() | 以指定方式解码 | 同上 |
s.endswith() | 是否以指定字符串结尾 | s.endwith(substr[,start,end]) 返回True或False,越界与count相同 |
s.expandtabs() | 将tab转为空格字符 | s.expandtabs(tabsize=8) 默认是8个空格,从字符开始数,够8个补齐空格 |
s.find() | 查找 | s.find(str[,start,end]) 返回查找子字符串的第一个位置,找不到返回-1 |
s.format() | 格式化 | 在下面字符串格式化详细解释 |
s.index() | 索引 | s.index(str[,start,end]) 返回查找到子字符串的第一个索引,没有则抛出异常 |
is系列方法 | 执行判断 | 返回True or False |
s.isalnum() | 字母和数字 | |
s.isalpha() | 字母 | |
s.isdecimal() | 是否仅含十进制字符(只存在unicode编码下) | True: Unicode数字,,全角数字(双字节)False: 罗马数字,汉字数字Error: byte数字(单字节) |
s.isdigit() | 是否只由数字构成 | True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字False: 汉字数字Error: 无 |
s.isnumeric() | 只要是数字就能识别 | True: Unicode数字,全角数字(双字节),罗马数字,汉字数字False: 无Error: byte数字(单字节) |
s.isidentifier() | 是否为标识符 | |
s.islower() | 字母是否全为小写 | |
s.isprintable() | 是否为可打印字符 | 含有制表符换行符之类的功能字符就返回False |
s.isspace() | 是否为空字符 | 空格,换行,回车,缩进,都是True |
s.istitle() | 是否为标题 | 首字母大写,其余字母小写,以特殊字符为分割 |
s.issupper() | 字母是否都为大写 | |
s.join() | 以字符为间隔符组合 | str.join(object) object是可迭代对象,元组,字典,列表,字符串 函数返回字符串 |
s.ljust() | 左对齐,默认空格填充 | s.ljust(lens[,str]) ,长度小于原字符串则返回原字符串 |
s.lower() | 转换为小写 | 只针对英语字符 |
s.lstrip() | 从左去除指定字符,默认为空格 | s.lstrip([char]) 会从左去除子字符串char中所有元素,直到不是 |
s.maketrans() | 返回一个字符串映射表(dic) | s.maketrans(intab,outtab[,deltab]) ,datatbl会映射到None.参数也可以用字典 |
s.translate() | 一般与maketrans 一起使用,返回修改后的字符串 |
|
s.partition() | 以指定字符串分割,返回三组 | s.partition(str) ,如果在开头则第一个元素为空字符 |
s.replace() | 替换字符串 | s.replace(ord,new[,times]) time默认是全部替换 |
s.rfind() | 从右开始,同find | |
s.rindex() | 从右开始索引,同index | |
s.rjust() | 右对齐,默认空格填充 | |
s.rapartition() | 从右分割,其他同partition | |
s.rsplit() | 从右开始分割同split | |
s.rstrip() | 从右去除指定字符串 | |
s.split() | 以指定字符串分割字符 | s.split(str[,times]) 次数默认是-1,分割所有,值得注意的是,如果分隔符在开头或者末尾,会分割出一个空字符串;返回的对象是一个列表 |
s.splitlines() | 以换行\n,\r,\r\n 作为分隔符分割 |
s.splitlines([keepends]) keepends默认为False,不保留换行符 |
s.startswith() | 判断是否以子字符串开头 | 返回True或False |
s.strip() | 跟lstrip一样,从两边去除 | |
s.swapcase() | 大小写进行转换 | |
s.title() | 每个单词首字母大写 | |
s.upper() | 每个字母变成大写 | |
s.zfill() | 用0填充到指定长度 | s.zfill(width) 等同于s.rjust('0',width) |
格式化
-
%
控制格式化
跟C语言中的printf差不多,通过%控制输出的长度,类型
下面通过几个例子来了解一下:基于元组:
print('今天是 %d 年 %d 月 %d 日' %(2020,1,3)) >>>今天是 2020 年 1 月 3 日 tuple1 = (2020,1,3) print('今天是 %d 年 %d 月 %d 日' %tuple1) >>>今天是 2020 年 1 月 3 日
基于字典:
dic1=dict(year=2020,month=1,day=3) print('今天是%(year)d 年 %(month)d 月 %(day)d 日'%{'year': 2020, 'month': 1, 'day': 3}) print('今天是%(year)d 年 %(month)d 月 %(day)d 日'%dic1) >>> 今天是2020 年 1 月 3 日 今天是2020 年 1 月 3 日
格式控制:
print('控制长度为5:"%5d"'%123) >>>控制长度为5:" 123" print("控制长度为5,用0填充:%05d"%123) >>>控制长度为5,用0填充:00123 #左对齐,右边补了空格 print("控制长度为5,左对齐:%-5dEND"%123) >>>控制长度为5,左对齐,用0填充:123 END #这里小数点前的整数代表的是整个长度,而不是整数部分的长度 print("控制小数位:%08.4f"%1.2) >>>控制小数位:001.2000
符号 意义 s 字符串格式 c 字符,int会被转化为ASCII码 d 十进制整数,可以把二进制八进制十六进制自动转换 i 跟d一样,没找到区别,大佬们指点一下 u 已经废弃了,现在作用跟d相同 o 八进制整数 x 十六进制整数 X 十六进制整数,字母是大写 e 带有指数的浮点数 E 同e,字母大写 f 十进制浮点数 F 同f,字母大写 g 同e,f G 同E,F % 转义%,编码为%% -
.format
方法格式化
利用花括号{}
来指定替换目标及要插入的参数
无序:print('Today is {}--{}--{}'.format(2020,1,3)) >>>Today is 2020--1--3
有序:
print('Today is {0}--{1}--{2}'.format(2020,1,3)) >>>Today is 2020--1--3 print('Today is {1}--{0}--{2}'.format(1,2020,3)) >>>Today is 2020--1--3
通过字典:
print('Today is {years}--{months}--{days}'.format(years=2020,months=1,days=3)) >>>Today is 2020--1--3
通过列表:
list1 = [2020,1,8] print('Today is {0[0]}--{0[1]}--{0[2]}'.format(list1)) >>>Today is 2020--1--8
控制格式:大体上与%相似,这里用
:
后的语句来控制print('π的值是{:08.4f}'.format(3.14159286)) >>>π的值是003.1416
-
f
函数a=1 b=4 print(f'a={a},b={b}') >>>a=1,b=4