python内置数据结构基础认知:字符串
字符串:
一个个字符组成的有序的序列,是字符的集合
使用单引号、双引号、三引号引住的字符序列
字符串是不可变对象
字符串可索引可迭代
Python3起,字符串就是Unicode类型
' ' # 单引号里面的双引号直接打印,单引号里面的单引号和特殊字符需要转义才能打印
" " # 双引号里面的单引号直接打印,双引号里面的双引号和特殊字符需要转义才能打印
''' ''' # 三个单引号里面的单引号和双引号都可以直接打印
""" """ # 三个双引号里面单引号、双引号和三个单引号都可以直接打印
r' ' r " " r''' '''里面的特殊字符(\,\r,\n,\t等)均默认直接打印(隐式转义)
如果字符串没有被r(R)引住,或者里面的特殊字符没有转义,则像\n、\t、\r\n、\r这样的特殊字符代表其表意(\n代表换行),当作一个字符
字符串join链接:
"string".join(iterable) -> str
# 将可迭代对象以string作为分隔符连接起来返回一个新字符串;可迭代对象里的元素必须是字符串
+ -> str # 两个字符串相加产生一个新列表
字符串分割:
split系 # 将字符串按照分割符分割成若干个字符串,并返回列表
.split(sep=None,maxsplit=-1) -> list of strings
# 从左到右;sep指定分隔符,默认为空格(相邻的空格当作一个空格处理);maxsplit指定分割的次数,默认-1为遍历整个字符串
.rsplit(sep=None,maxsplit=-1) -> list of strings
# 从右到左;sep指定分隔符,默认为空格(相邻的空格当作一个空格处理);maxsplit指定分割的次数,默认-1为遍历整个字符串
.splitlines([keepends]) -> list of strings # 按照行分隔符切字符串,keepends=true表示保留行分隔符,默认不保留(用split()更简单一些)
partition系 # 将字符串按照分割符分割成头,分割符,尾的三元组
.partition(sep) -> (head,sep,tail)
# 从左到右,遇到分隔符就返回头、分隔符、尾三部分的三元组;没有找到分隔符,就返回头、两
个空元素的三元组;sep分割字符串,必须指定
.rpartition(sep) -> (head,sep,tail)
# 从右到左,遇到分隔符就返回头、分隔符、尾三部分的三元组;没有找到分隔符,就返回两个空元素,尾的三元组
字符串修改:
.replace(old,new[,count]) -> str (old与new需要加引号)
#字符串中找到匹配并替换成新子串,返回新字符串
#count表示替换几次,默认全部替换
.strip([chars]) -> str (字符集需要用引号引起来)
# 从字符串两端去除指定的字符集chars中的所有字符(只要字符串两端包含字符集里任意一个字符就去除)
# 没有指定,默认去除两端的空白字符
lstrip([chars]) -> str # 只从左做开始
rstrip([chars]) -> str # 只从做右开始
字符串查找O(n):
.find(sub[,start[,end]]) -> int (sub需要用引号引住)
# 在指定的区间[start, end),从左至右,查找子串sub。找到第一个立刻返回索引,没找到返回-1
.rfind(sub[,start[,end]]) -> int
# 在指定的区间[start, end),从右至左,查找子串sub。找到第一个立刻返回索引,没找到返回-1
index(sub[,start[,end]]) -> int (sub需要用引号引住,少用,可能抛出异常)
# 在指定的区间[start, end),从左至右,查找子串sub。找到第一个立刻返回索引,没找到抛出异常ValueError
rindex(sub[,start[,end]]) -> int (sub需要用引号引住,少用,可能抛出异常)
# 在指定的区间[start, end),从右至左,查找子串sub。找到第一个立刻返回索引,没找到抛出异常ValueError
.count(sub[start[,end]]) -int #在指定的区间[start,end),从左到右统计子串sub出现的次数
字符串判断:
startswith(suffix[,start[,end]]) -> bool # 在指定的区间[start,end),字符串是否是suffix开头
endswith(suffix[,start[,end]]) -> bool # 在指定的区间[start,end),字符串是否是suffix结尾
is系列
.isalnum() -> bool 是否是字母和数字组成
.isalpha() 是否是字母
.isdecimal() 是否只包含十进制数字
.isdigit() 是否全部数字(0~9)
.isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线
.islower() 是否都是小写
.isupper() 是否全部大写
.isspace() 是否只包含空白字符
字符串大小写:
.upper() # 将字符串全部转为大写
.lower() # 将字符串全部转为小写
字符串格式化:
format函数
'{}'.format(*args) -> str # 按照索引位置对应打印,默认一一对应
'{xxx}'.format(**kwargs) -> str # 按照字典key来打印value,xxx代表key
: # 大括号中索引与格式化打印模式之间的分隔符
格式化打印模式常用:
.number #以几位有效数字打印;{:.2}
.numberf # 打印到小数点后精度 {:.2f} # {:4.2f} 表示打印到小数点2位并且总字符串共占4个字格
.number% # 例子:'{:.2%}'.format(7/9) 输出 '77.78%'
< # 左对齐 # {:<10} # 10表示总共打印占几个字格,实际字符超出则撑破
> # 右对齐 # {:>10}
^ # 居中对齐 # {:^10}
*^ # 居中对齐并以*填充 # {:*^10}
特殊例子:
1、 '{0:b},{0:x},{0:c},{0:o}'.format(97) 输出 '1100001,61,a,141';
0表示索为0,不写0会出错
b:二进制打印;x:16进制打印;c:ASCII码打印;o:八进制打印
2、>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d) # 时间修饰
'2010-07-04 12:15:58'
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d) # 时间修饰
'2010-07-04 12:15:58'