列表
列表类型是一个容器,它里面可以存放任意数量、任意类型的数据。列表是可变对象,有序。
1、构造列表
(1)使用中括号[] [1,2,3]
(2)使用list()构造方法 list(“abcd”) list(range(0,4))
列表推导式[x for x in “abcdef”]
2、其他操作见python序列操作
3、列表排序:sort()和sorted()
L.sort():是列表类型的方法,只适用于列表,对列表L直接原地排序.
sorted(L): 是内置函数,支持各种容器类型。返回排序后的新结果,需要赋值给变量才能保持排序结果。
元组
元组和列表一样,都是容器形数据结构,并且都是序列。元组中的元素也是按照索引位置有序存放,所以可以进行索引取值、切片等操作,但是元组不可变。
1、构造元组
(1)直接使用括号()包含元素
(2)使用元组的构造函数tuple()将数据转换成元组。
2、修改元组
因为元组是不可变对象,所以没有直接方法修改元组,只能通过其它手段根据原始元组间接地构造新元组。
(1)可以考虑将元组转换成可变的列表,修改之后再转换回元组
t = ('a','b','c','d')
tmp = list(t)
tmp[2] = "cc"
t = tuple(tmp)
(2)通过解析的方式构造新元组
T = (1,2,3,4,5)
tuple( i * 2 for i in T)
字典
字典(dict)是存储key/value数据的容器,存储的元素没有位置顺序,所以dict不是序列,不能通过索引的方式取元素。
在python中,能hashable的数据类型都必须是不可变类型的,所以列表、集合、字典不能作为dict的key,字符串、数值、元组都可以作为dict的key(类的对象实例也可以,因为自定义类的对象默认是不可变的)。
1、构造字典
(1)使用大括号{} D = {"key1": "value1", "key2": "value2", "key3": "value3"}
(2)使用dict()构造方法,dict()构造方法有三种
方法一:
temp = dict(name='xiaoming', age=18)
方法二:
temp = dict((('name', 'xiaoming'), ('age', 18)))
方法三:dict() zip() 函数联合使用
temp = dict(zip(['name', 'age'], ['xiaoming', 18]))
(3) 使用dict对象的fromkey()方法
是dict的类方法,所以可直接通过dict类名来调用(当然,使用已存在的对象来调用也没有问题)。它构造的字典的key来自于给定的序列,值来自于指定的第二个参数,如果没有第二个参数,则所有key的值默认为None。所以,第二个参数是构造新dict时的默认值。
(4) 使用dict对象的copy()方法
dict的copy()方法会根据已有字典完全拷贝成一个新的字典副本。但需要注意的是,拷贝过程是浅拷贝。
2、增删改查
get(key,default):检索dict中的元素,如果元素存在,返回对应的value,否则返回制定的default.
len():查看字典有多少个元素
set(key,default):检索并设置一个key/value,如果元素存在,直接返回对应的value,如果key不存在,则新插入这个Key并制定value为default。没有指定又不存在,则返回none。
update(key/value):根据给定的key/value更新已有的键,如果键不存在则新插入。
Del D[key]可以用来根据key删除字典D中给定的元素,如果不存在则报错。
clear():删除字典中所有的元素
pop(key,default):移除给定分元素并返回移除的元素。如果元素不存在,则返回defalut。
popitem():用于移除并返回一个(key,value)元素对,每调用一次移除一个元素,没元素可移除后报错。在python3.7中保证以后进先出的顺序移除,在此之前不保证移除顺序。
3、迭代和dict视图
keys():返回字典中所有的key组成的视图对象
values():返回字典中所有的value组成的视图对象
items():返回字典中所有(key,value)元组对组成的视图对象
iter(d):返回字典中所有key组成的可迭代对象
4、字典的迭代和解析
字典自身有迭代器,如果需要迭代key,不需要使用keys()来间接迭代。
for key in d
for key in d.keys() 等价
字典解析
d={k:v for (k,v) in zip(["one","two","three"],[1,2,3])}
>>> d
{'two': 2, 'one': 1, 'three': 3}
>>> d={x:x**2 for x in [1,2,3,4]}
>>> d
{1: 1, 2: 4, 3: 9, 4: 16}
d={x:None for x in "abcd"}
>>> d
{'b': None, 'd': None, 'a': None, 'c': None}
集合
集合set也是容器,其内元素都是无序、唯一、可变的。它常用来做成员测试,移除重复数据、数据计算(比如交集、并集、差集)。
python提供了另一种不可变的集合类型frozenset
s={‘a’,’b’,’c’}
空的{}表示的字典,而不是集合,如果想要构造空集合,可以使用不带参数的set()来构造。
1、集合运算操作
集合的运算有交集、并集、差集等操作。他们有两种方式:操作符版的和方法函数版的。符号版的都只能集合对集合,函数版的可以集合和其他比较,比如列表。
(1)交集&或intersection()方法
x & y {'e', 'd'}
x.intersection(y)
(2)并集| 或union()方法
x|y
x.union(y)
(3)差集 - 或difference()
x-y
x.difference(y)
(4)取集合中非交集的部分
x^y
子集、真子集、超集
# 子集
s1 <= s2
s1.issubset(s2)
s1.issubset(other_type)
# 真子集
s1 < s2
# 超集
s1 >= s2
s1.issuperset(s2)
s1.issuperset(other_type)
# 真超集
s1 > s2
2、集合基本操作
s1.add(elem)添加元素到集合s1中。因为集合中的元素都唯一,所以添加已存在的元素不会有任何效果,但也不会报错。
s1.remove(elem)移除集合s1中的元素。
s1.pop()随机移除一个元素并返回这个元素。
s1.clear()清空集合。
s1.discard(elem)移除已存在的某个元素,如果不存在则无视(返回None)。
s1.copy()拷贝(浅拷贝)集合s1。
len(s1)返回集合s1长度。
i in s1测试元素i是否在集合s1中