1. List
列表,即list是Python中内置的一种结构化数据类型。它是一种有序的集合(注意其中元素的类型不要求相同),可以随时添加和删除其中的元素。
1 ) 初始化
list1 = [] #一个空列表list2 = [1, 2, 3, 5] #一个非空列表
2 ) 基本操作
- 追加元素到末尾:
list1.append(6)
- 把元素插入到指定的位置,其中第一个参数是指示具体位置的索引:
list2.insert(3, 4)
- 用一个列表来扩展另外一个列表,即把一个列表中的所有元素追加到另外一个列表的末尾:
list2.extend(list1)
3 ) 列表解析(list comprehension)
从一个列表中筛选出符合条件的元素,例如:
list3 = [x for x in list2 if x%2==0]
2. Tuple
元组也是一种有序列表,它与列表很相似,但是元组中的内容是不能修改的。
tuple1 = (1, 2)tuple1 = (1, ) #注意只有一个元素的tuple不能写成 tuple1 = (1)
或者有时你需要把把一个list转换成tuple,例如:
tuple2 = tuple(list2)
3. Dict
Python中内置了字典类型dict,即dictionary,在其他语言中也称为map,使用键-值(key-value)对存储,具有极快的查找速度。
1 ) 初始化与访问
dict1 = {} #一个空字典dict2 = {'Tom': 95, 'Jack': 75, 'Mary': 85} #一个非空字典
通过键-值对的赋值,可以向字典中添加新元素(如果原键不存在的化),如果原键本就存在于字典中,那么赋值就相当于将原有值设置成新值(因为一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉),例如:
dict1['color'] = 'red'dict2['Tom'] = 100
另外,如果要取某个key对应的value时,若key不存在,那么该访问将报KeyError错误。要避免这种错误,有两种方法:
i)访问前,先通过in判断key是否存在:
if 'Tom' in dict2: print('Yes')
ii)通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
dict2.get('James')dict2.get('James', -1)
2 ) 删除
删除字典中的某一项:
del dict2['Mary']
3 ) 遍历
两个重要的方法:keys() 返回字典的所有的key,values() 返回字典所有的值,例如
for k in dict2.keys(): print(k)
4. Set
Set就是集合,它具有无序、不重复的特点。
1 ) 初始化
可以用一个列表来初始化一个集合,但是集合会对原列表做去重操作:
s1 = set([1, 1, 2, 2, 3, 3]) # {1, 2, 3}s2 = set() # 初始化一个空集
2 ) 基本操作
通过add(key)方法可以添加元素到set中,若添加了重复的元素,则不会产生效果;通过remove(key)方法可以删除元素:
s1.add(4)s1.remove(1)
对于set来说,数学上的定义的集合操作(包括求交、并等),Python中也是支持的:
s1 = set([1, 2, 3])s2 = set([2, 3, 4]) s1 & s2 #{2, 3}s1 | s2 #{1, 2, 3, 4}
3 ) hashable 与 unhashable
为了追求高的搜索效率,Set中的元素必须是可哈希的(hashable)。基本数据类型都属于此类,Tuple也是如此。但列表是unhashable的。因此,“列表的列表”是可行的,但“列表的集合”则是不可行的。通常,如果集合中的元素是一个有序表,那么需要使用tuple类型。
listoflists = [[0, 1, 2], [2, 3, 5, 6], [0, 1, 2], [1, 2, 3, 4, 5]]setoftuples = {tuple(l) for l in listoflists} #{(0, 1, 2), (1, 2, 3, 4, 5), (2, 3, 5, 6)}