Python重要数据结构之list, tuple, dict, set
List
创建方法:
使用方括号[ ]创建一个list
L = [] L = ['a','b','c']
有序性:有序
可更改性:可更改
元素唯一性:可重复
访问方式:
读取/更改:
List按照数字索引访问内容,起始索引为0(不要越界)
print L[0] L[1] = 'string1'
List可以使用负数索引完成倒序访问,起始索引为-1(不要越界)
print L[-1]
添加/删除
使用append方法可以向list末尾添加一个新元素;使用pop方法元素读出list末尾一个元素并将其删除,为pop方法指定索引号可读出并删除指定元素
L.append("one more element") the_last_element = L.pop() the_third_element = L.pop(2) //索引号起始为0
使用insert方法向list的任意位置添加一个新元素, 第一参数为索引号,第二个是新元素;
L.insert(2,'a new element')
进阶操作
切片(获取list中的一部分内容生成新的list)
使用L[起始索引:终止索引]来生成一个从起始索引开始(包括起始索引)到终止索引(不包括终止索引)的list, 可以使用负数进行倒序索引
第一个索引值缺省表示从第一个元素开始取,第二个索引值缺省表示取到最后一个元素
还可以使用L[起始索引:终止索引:间隔n]来每n个数的元素取一个,即每隔n-1个元素取一个
L = ['a','b','c','e'] new_L = L[1:3] //这时new_L包括a,b,c三个元素(索引从0开始) new_L = L[-4:-2]//这时new_L包括a,b两个元素 new_L = L[:2] //这时new_L包括a,b,c三个元素 new_L = L[:] //相当于复制了一个L,new_L和L的改动互不影响 new_L = L //这样的话,new_L与L表示同一个list的两个名称,任何一个改动另外一个也变化 new_L = L[::2] //这时new_L包括a,c两个元素
ps:字符串也可以进行类似list的切片操作,将每一个字符视为一个元素,按照list的方式操作即可
Tuple
创建方法
使用小括号( )创建一个tuple
T = () //空tuple是无意义的,因为tuple一旦创建就不能修改了 T = ('a','b','c') T = (1,) //只含一个整数的tuple在创建时需要加一个逗号以同普通整数区分(因为小括号可以是运算符)
有序性:有序
可更改性:不可更改
元素唯一性:可重复
访问方式:
读取
访问方式同list,可以使用数字正序或者倒序索引,但其内容不可更改,但如果使用list作为tuple的元素,则可以通过更改list变相的改变tuple
print T[2] // 使用小括号创建,但仍然使用中括号索引 T = ('a','b',[])
Dict
创建方法
使用大括号来创建一个dict
D = { 'first':'a', // dict以“索引:值”的方式创建,即key:value 'second':'b', 'third':'c' }
有序性:无序
可更改性:可更改
元素唯一性:value可重复, key唯一且不能为可变类型如list
访问方式
读取/更改
使用key来索引访问,类似于list (访问到不存在的key会报错);
使用in操作符可以判断key是否存在
使用get方法通过key访问(key不存在时返回None)
用不存在的key做索引给dict赋值可以增加新元素,存在的key做索引给dict赋值会更新**key对应的**value
print D['first'] if 'first' in D: print D['first'] print D.get('first') D['fourth'] = 'new_element' D['first'] = 'change_element'
set
使用set()创建一个set,传入一个list作为参数可以用list中的值初始化set
S = set() S = set(['a','b','c'])
有序性:无序
可更改性:可更改
元素唯一性:元素唯一,且元素不能为可变类型如list
访问方式
读取
因为set无序所以不能使用数字索引来取出特定元素,使用in运算符可以判断一个元素是否在set
使用add方法可将一个元素添加到set中
使用pop方法从set中取出一个元素并从set中删除
if 'a' in S print "a在S中" S.add('d') print S.pop
ps:set的元素无序,因此不能确定pop出的元素是哪一个
总结
List和tuple在内存中的组织方式相似,有序,采用数组实现,搜索效率较低;Dict和set在内存中的组织方式相似,无序,占用内存较大,采用哈希表实现,搜索效率很高
四种数据类型都能够存放各种类型的元素,且不需要储存的元素类型相同。需要注意的是,dict的索引(key)和set中的元素不能为可变的数据类型,如list。
List和tuple可以使用数字索引来正序或者倒序的访问,但tuple的元素个数和名称等是不可改变的,可以把List作为tuple的元素来变相的是tuple能够改变。
set可以用于去重复,但无法访问其中的特定元素,dict可以通过索引(key)来访问其中的元素,也可通过get方法来访问,使用in运算符,可以判断一个元素**在不在**set中或者判断在不在dict的key中。
使用 for 变量 in list/tuple/dict/set 可以遍历这些结构中的值,注意,但遍历dict时for中的变量取出的是dict的key,需要通过key读出value