列表
Python中列表是一个有序的序列。空列表 可以用 []
或者 list()
生成.
列表用一对 []
生成,中间的元素用 ', ' 隔开,其中的元素不需要是同一类型,同时列表的长度也不固定。
通过索引和分片修改list
与字符串不同的是,列表可以通过索引和分片来修改。
事实上,对于连续的分片(即步长为 1 ),Python采用的是整段替换的方法,两者的元素个数并不需要相同
a = [10, 11, 12, 13, 14]
a[1:3] = [1, 2, 3, 4]
a
#out: [10, 1, 2, 3, 4, 13, 14]
对于不连续(间隔step不为1)的片段进行修改时,两者的元素数目必须一致:
a = [10, 11, 12, 13, 14]
a[::2] = [1, 2, 3]
a
#out: [1, 11, 2, 13, 3]
列表方法
列表方法 | 用法 | detail |
---|---|---|
计算元素个数 | l.count(ob) |
列表中元素 ob 出现的次数 |
某个元素位置 | l.index(ob) |
列表中元素 ob 第一次出现的索引位置,如果 ob 不在 l 中会报错 |
添加单个元素 | l.append(ob) |
将元素 ob 添加到列表 l 的最后 |
添加序列 | l.extend(lst) |
将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst |
插入元素 | l.insert(idx, ob) |
在索引 idx 处插入 ob ,之后的元素依次后移 |
移除元素 | l.remove(ob) |
将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错 |
弹出元素 | l.pop(idx) |
将索引 idx 处的元素删除,并返回这个元素 |
排序 | l.sort() |
将列表中的元素按照一定的规则排序 |
列表反向 | l.reverse() |
将列表中的元素从后向前排列 |
拷贝 | l.copy |
创建列表浅拷贝,深拷贝用copy模块中的deepcopy() |
元组
与列表相似,元组Tuple也是个有序序列,但是元组是不可变的,用()
生成。
元组排序:
可以用
sorted(a)
排序,不会改变元组,a.sort()
不可用,回报错
元组函数和方法
元组函数: len()
, max()
,min()
,tuple(a)
由于元组是不可变的,所以只能有一些不可变的方法,如计算元素个数 a.count()
和元素位置 a.index()
等,用法与列表一样。
列表与元组的速度比较
元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。
字典
字典是一种映射类型,字典没有顺序,key必须是不可变类型,而value可以是任意python对象,int和string最常用作key,但float不推荐。元组也可以用做key。
Python中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆。
字典操作
常见操作 | 用法 |
---|---|
空字典 | 使用 {} 或者 dict() ,只要元素和元素之间有对应关系都可用dict() |
初始化字典 | a= {key: value,key: value,...} |
插入,更新键值 | a[key]=value |
查看键值 | a[key] |
成员判断 | 用in |
删除字典成员 | del a[key] |
转化来生成字典 | 通过 dict() |
invent = dict([('from', 18), ('spat', 34), ('snit', 23)])
invent
#out: {'from': 18, 'snit': 23, 'spat': 34}
字典方法
列表方法 | 用法 | detail |
---|---|---|
get | d.get(key, default = None) |
返回字典中键对应的值,如果没有这个键,返回 default 指定的值(默认是 None)。索引不存在的键值会报错,get不会: |
pop | d.pop(key, default = None) |
删除并返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None ) |
update | d.update(newd) |
将字典newd中的内容更新到d中去 |
in | value in d |
判断字典中是否有某个特定的键 |
clear | d.clear() |
清空字典 |
key | d.keys() |
返回一个由所有键组成的列表; |
value | d.values() |
返回一个由所有值组成的列表; |
items | d.items() |
返回一个由所有键值对元组组成的列表; |
例: update()
的用法
person = {'born': 1831, 'last': 'Maxwell', 'first': 'Jmes'}
person_modi = {'first': 'James', 'middle': 'Clerk'}
person.update(person_modi)
person
#out: {'middle': 'Clerk', 'born': 1831, 'last': 'Maxwell', 'first': 'James'}
例: items()
的用法
barn = {'cows': 1, 'dogs': 5, 'cats': 3}
barn.items()
#out: [('cows', 1), ('cats', 3), ('dogs', 5)]
for key, value in barn.items():
例: 创建员工信息表时,将所有员工工资默认为3000
aDict={}.formatkeys(('A','B','C','D'),3000)
aDict
#out: {'A':3000, 'B':3000, 'C':3000, 'D':3000}
例: 已知姓名列表和工资列表,生成字典类型员工
names=['A','B','C','D']
salaries=[3000,2000,15000,2500]
dict(zip(names, salaries))
集合
集合 set 是一种无序的序列
空集合:
set()
, 创建空集合的时候只能用set来创建,因为在Python中{}创建的是一个空的字典
初始化集合:
可以使用一个列表来初始化一个集合
a = set(l)
,集合会自动去除重复元素
集合操作
集合方法 | 用法 | detail |
---|---|---|
并 | a.union(b) 或a | b |
包含两个集合所有元素的集合(去除重复) |
交 | a.intersection(b) 或 a & b |
返回包含两个集合共有元素的集合 |
差 | a.difference(b) 或 a - b |
返回只在 a 不在 b 的元素组成的集合 |
对称差 | a.symmetric_difference(b) 或 a ^ b |
不同时在 a 和 b 中的元素组成的集合 |
包含关系 | b.issubset(a) 或b <= a |
判断 b 是不是 a 的子集,判断真子集用a < a |
集合方法
集合方法 | 用法 | detail |
---|---|---|
add | s.add(a) |
跟列表的 append 方法类似,用来向集合添加单个元素 |
update | s.update(seq) |
跟列表的extend方法类似,用来向集合添加多个元素 |
remove | s.remove(ob) |
从集合s中移除元素ob,如果不存在会报错 |
pop | s.pop() |
集合没有顺序,所以删除并返回集合中任意一个元素,如果没有元素会报错 |
discard | t.discard(ob) |
作用与 remove 一样,但是当元素在集合中不存在的时候不会报错。 |
difference_update | a.difference_update(b) |
从a中去除所有属于b的元素 |
不可变集合
不可变集合一旦创建就不可变,使用 frozenset()
来进行创建