Python:数据结构(list, tuple, Dict & Set)
list: Python中内置的有序数据结构,即数组。由于Python是动态语言,因此数组元素的类型没有限定。[*]classmates = [“Michael”, “David”,”Bob”,”Tracy”]
[*]空列表:empty_list = []
[*]使用负数来表示倒叙,即索引-1来表示最后一项:classmates[-1]打印出Tracy,classmates[-4]打印出Michael,注意倒叙不是从0开始,因为-0和0没区别。
[*]list.insert(index, data) 在指定的位置插入指定内容。
[*]list.append(new_list) 在list结尾将整个new_list作为一个元素插入。
[*]list.extend(new_list)在list结尾将new_list的元素逐一插入。
[*]list.pop()返回并删除list的最后一个元素。
推导公式的多层嵌套:
# 例:打印1~999中个位数和百位数相同的数字,每个for/if语句都是包含的关系。
1 print(x*100 + y*10 + z for x in range(10) for y in range(10) for z in range(10) if x > 0 and x == z)
for语句中获得list下标:enumerate(list)会将list转换成(index,item)的tuple。
1 >>> L=['abc','bcd','cde']
2 >>> for n in enumerate(L):
3 ... print(n)
4 ...
5 (0, 'abc')
6 (1, 'bcd')
7 (2, 'cde')
8>>> for index,item in enumerate(L):
9 ... print(index,',',item)
10 ...
11 0 , abc
12 1 , bcd
13 2 , cde
click me
tuple:不可变的列表
[*]list使用的是中括号[]声明,tuple使用小括号()声明。
[*]由于tuple不可变,自然也就无法使用insert()/append()/extend()/pop()等方法。
[*]()可以创建不同元素数量的tuple,但注意当tuple的元素只有一个的时候,要使用逗号:a_tuple=(1,)
[*]因为没有逗号的话会被当做是四则运算中的括号,为免混淆会多了一个逗号。
[*]tuple的不可变指的是元素地址的不可变,而元素如果是引用类型,则所引用的地址是可变的。例如tuple的元素中有一个list,则该list的内容可变。
dict (字典/dictionary):
[*]key-value的格式,其实就是JSON。
[*]
1 dict1 = {
2 'Adam' : 95,
3 'Lisa' : 85,
4 'Bart' : 59,
5 'Paul' : 75
6 }
click me
[*]可通过BIF: len(dict) 查看dict的长度。
dict的三个特点:
[*]查找速度:比list快,相对地占用较大内存。
[*]元素无序。
[*]key必须是不可变且不可重复,如字符串、整数、浮点数
操作dict
[*]添加一个item: dict[‘key’]=value
[*]获取dict的key集合:dict.keys()
[*]获取dict的values集合:dict.values()
[*]获取个key-value pair的tuple:dict.items()
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
set
[*]无序、不重复(对大小写敏感)
[*]可通过BIF:set(list)来创建
[*]通过in来判断item是否在set中:’Paul’ in s >> True
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
参考资料:
[*]Python.org
[*]廖雪峰的个人网站
页:
[1]