Python-序列、字符串、列表、字典
2021-08-24 10:03:39 22 举报
AI智能生成
Python-序列、字符串、列表、字典
作者其他创作
大纲/内容
序列
内涵
成员
有序排列
通过”下标偏移量”访问
包括
str
list
tuple
操作符
标准类型操作符
均适用
序列类型操作符
成员关系
in
obj in seq
not in
连接
+
推荐用seq1.extend(seq2)
seq1 + seq2
重复
*
seq * expr
切片
[], [:], [::]
seq[ind]
seq[ind1:ind2]
基本样式
[下限:上限:步长]
上限本身,不包含在内(左闭右开)
扩展样式
倒数切片
s[-10:-1]
[-2:]
逆序
s[::-1]
隔一取一
s[::2]
全选
s / s[:] / s[::] / s[:None] / s[None:]
注意
切片索引,可超过序列长度
range(-1,-4,-1) 返回[-1,-2,-3]
BIF
类型转换
list()
str()
tuple()
可操作BIF
参数接受
序列对象
len()
reversed()
sum()
zip()
以上+可迭代对象
enumerate(0
sorted()
以上+参数列表
max()
min()
其他操作
all(s)
如果“所有”元素都为True,返回True
any(s)
如果“任一”元素为True,返回True
s.count(x)
返回x在s中出现的“次数”
s.index(x)
返回x在s中第一次出现的“下标”
...
字符串
操作符
标准类型操作符
e.g. 比较操作,按照ASCII值来比较大小
序列操作符
+
可用来连接多个字符串
%或join()性能更佳
...
格式化操作符(%)
%[(name)][flags][width].[precision]typecode
更推荐.format()方法
辅助指令
(name) 字典参数
print "I'm %(key)s" %{key:value}
flags
+ 正数前显示“+”
- 左对齐
<sp> 一个空格
在正数的左侧填充一个空格,从而与负数对齐
0 数字前用0填充,而非默认空格
% 转义
%% 表示普通字符%
width 显示宽度
precision 小数点后精度
typecode
%d 整数
%2d 占两个字符
%02d 占两个字符并用0补全
%f 浮点数
%.2f 两位小数
%s 字符串
永远起作用:转换任何类型-->字符串
%e 科学计数法
原始字符串操作符(r/R)
r'' ''内部字符,默认“不转义”
Unicode字符串操作符(u/U)
u''
独特特性
特殊字符串
注意字符\
\n 换行
\t 制表符
\\ 反斜杠\
\r 回车
''' ''' 多行内容
不可变性
指向永远不变
改变一个字符串,需要新建“字符串”
注意
单引号和双引号用法相同,均表示字符串
字符串,可看作特殊的“元组”
编码问题
概念
1bit(位) =0/1=2种可能性
1byte(字节)
=8bit
=2^8=256种可能性
背景知识
ASCII
1个字节 8位
英文z字符+常见符号
Unicode
2个字节 16位
字符集 世界文字字符
变长编码方式
UTF-8
英文 1个字节
中文 3个字节
生僻字符 4-6字节
UTF-16
统一 2个字节
汉字
DBCS
GB2312
GBK
GB18030
127号
之前 “半角”字符
之后 "全角”字符
计算机只能处理数字
需要
文本-->数字
Unicode(字符集)-->UTF-8(可变长编码方式)
Python
类型
UTF-8 3.X版本“默认编码”
ASCII 2.X版本“默认编码”
指定方式
e.g. #-*-coding:-*-
转换为UTF-8编码
u'ABC'.encode('utf-8') ‘ABC’
e.g. 中国='zhongguo' print(中国)
BIF
标准类型
cmp() 按照ASCII值来比较大小
序列类型
len() / enumerate() / zip()
字符串类型
input()
str() & unicode() 工厂函数
字符串BIF
查看所有BIF dir(str)
更改显示方式
大小写
str.capitalize() 首字母大写,其余小写
str.title() 每个单词首字母大写
str.lower()/str.upper() 全大(小)写
str.swapcase() 反转大小写
宽度
str.center(width) 居中
str.ljust(width) / str.rjust() 左(右)对齐
str.zfill(width) 前面用0填充至width长度
编码
decode() / encode()
检查
str.count()
str.find(str) / str.rfind()
str.index(str)/ str.rindex()
str.endswith(obj) / str.startswith()
str.isalnum() / str.isalpha() / str.isdigit() / str.islower() / str.isspace() / str.istitle() / str.isupper()
修改
str.expandtabs() tab符-->空格
('a', 'A') 创建(str中的a-->A)的新对象后返回
str.strip() / str.istrip() / str.rstrip()
str.split() / str.rsplit() / str.splitlines()
str.partition(str) / str.rpartition() 根据str分割字符为“三元组”
str.join(iter)
格式化字符串
str.format()
位置参数
'{1},{0},{1}'.format('a','b')
#结果 'b,a,b'
关键字参数
'{name},{age}'.format(age=18,name='kzc')
#结果 'kzc,18'
下标参数
p=['kzc',18]
'{0[0]},{0[1]}'.format(p)
#结果 'kzc,18'
格式限定符
<类型>
<.精度>
,
<宽度>
<对齐>
<填充>
:
e.g.
填充&对齐&宽度
'{:>8}'.format('189')
#结果 ' 189'
'{:0>8}'.format('189')
#结果 '00000189'
'{:a>8}'.format('189')
#结果 'aaaaa189'
精度&类型
'{:.2f}'.format(321.33345)
#结果 '321.33'
数字类型
二进制、十进制、八进制、十六进制 b、d、o、x
'{:b}'.format(17)
#结果 '10001'
金额的千位分隔符
'{:,}.format(1234567890)'
#结果 '1,234,567,890'
其他
str.translate
table 参数
转换字符串字符,通过“maketrans方法”转换而来
del 参数
要过滤的的字符
e.g.
准备
from string import maketrans
intab="aeiou"
outtab="12345"
str="this is string example...wow!!!"
print(str.translate(trantab))
-->th3s 3s str3ng 2x1mpl2.....w4w!!!
print(str.translate(trantab, 'xm'))
-->th3s 3s str3ng 21 pl2.....w4w!!!
属于序列
不可变
列表|元组
list
元素可变 操作都会影响“原表”
操作符
标准类型操作符
比较操作符,依次比较元素,直到一方胜出
序列类型操作符
[] & [:]
in & not in
+
用list.extend(list2)更佳
*
列表解析
内建函数
标准类型
cmp() 依次判断
同类型元素
比较 值大小
不同类型元素
两方都是“数字" 强制转换成”同类型“比大小
一方是”数字“ 数字是”最小的“
否则 按字母顺序比较
一方列表先到结尾
另一方大
序列类型
len() / sum() / max() / min()
orted() / reversed()
enumerate() / zip()
list() / tuple()
列表类型
list.count() 计数
list.index() 查找
list.append() 追加到末尾
list.insert(1, 'abc') 插入元素到”索引号为1“的位置
list1.extend(list2) 在list1的末尾添加list2的所有元素
list.pop() 删除末尾元素
list.pop(i) 删除”指定位置i“的元素
list.remove()
list.sort() / list.reverse() 排序/逆序
注意
用于改变对象值得”可变对象得方法“
无返回值
直接修改“原对象”
tuple
元素不可变
“指向”永远不变。一旦初始化不能修改
内建函数
基本同list
但“元组类型BIF”只剩下
tuple.count()
tuple.index()
工厂函数 tuple()
特殊特性
不可变类型
数字、字符串、元组
并非那么“不可变”
t=t+t
达到修改的目的。本质上新建了对象
若包含list元素
list元素可变,但“指向list”不变
默认集合类型
多对象的、逗号分隔的、没有明确用符号定义的
均默认为“元组” e.g. 函数返回的多对象
建议:总是“显式”用“圆括号表达式”表示“元组"
注意
单元素元组 t=(1,)
","用来消除小括号的歧义
元组 可作为 字典的键值
拷贝问题
浅拷贝
新建一个对象
对象类型 同”原对象“
内容 原对象元素的”引用“
三种形式
完全切片操作 [:]
a=[1,2,3]
b=a[:]
工厂函数 list()、dict()
b=list(a)
copy模块 copy.copy()
b=copy.copy(a)
区分
字符串
新建对象+显式拷贝
列表元素
新建对象+仅是复制引用
深拷贝
新建对象+全新引用
copy.deepcopy()
注意
”非容器类型“没有被拷贝一说
即数字、字符串、其他”原子“类型对象
”浅拷贝“用”完全切片操作“来完成
”元组变量“只包含”原子类型对象“
不会进行”深拷贝“
只能得到”浅拷贝“
属于序列
列表(有序、可变)
元组(不可变)
字典|集合
dict
操作
创建
={}
=dict(([key,value],[key,value]))
{}.fromkeys((key1,key2),value)
访问
键/值/键值对元组
dict.keys() / values() / items()
判断key是否存在
in / not in
dict.get(key, -1)
不指定-1会返回None
删除key
dict.pop(key) / popitem()
返回该条目值(键值二元组)
del dict[key]
清空dict
dic.clear()
del dic
BIF
标准类型
type()
str()
cmp()
字典大小--键--值
相关函数
dict()
工厂函数
参数为
容器类型d对象
可迭代。必须成对出现
另一个映射对象
浅拷贝
len()
hash()
判断是否”可哈希“
“可哈希”才可作为“字典的值”
BIF
返回“迭代器”
dict.keys()
dict.items()
dict.values()
其他
dict.copy() 浅复制
dict.get(key, default=) 返回对应value或默认值
dict.setdefault(key, default=)
dict.update(dict2) 添加字典
"dict" vs "list"
dict
以“空间“换”时间“
查找速度极快
不会随key增加而变慢
占用大量内存
list
顺序查找
速度随元素增加而变慢
占用内存少
注意
key必须是”可哈希“的
不可变对象
均可哈希
字符串、数值
元组
只能包括不可变类型
set
一组key的集合
无序排列、可哈希
功能
成员关系测试
删除重复元素
分类
可变集合
set
不可变集合
frozenset
创建
仅能用”工厂函数"
set() / frozenset()
e.g.
set('abcabc')
{'a','b','c'}
操作符
标准类型
in 、 not in
== 、!= 、 >,>= 、 <,<=
集合类型
并集OR
set1 | set2
set1.union(set2)
交集AND
set1 & set2
set1.intersection(set2)
差补C
set1 - set2
包含在set1且不在set2中
set1.difference(set2)
对称差分XOR
set1 ^ set2
两个集合的差别项
set1.symmetric_difference(set2)
BIF
添加元素
set.add(key)
set.update(seq)
扩展set
set.remove(key)
删除元素
set.remove(key)
set.discard(obj)
若obj存在,删除它
set.pop()
删除任意一个对象
...
"set" vs "tuple"
set
{1,2,3,4}
无序
可看作“无value的字典”
tuple
{1,2,3,4}
有序
可看作“不可变的列表”
字典(键值对、可变)
收藏
0 条评论
下一页