列表:
列表在Python中具有举足轻重的地位,也是该语言最通用的序列对象。列表没有固定大小,大小是可变的。需要补充的是,它不像字符串具有不可变性。
由于列表是序列中的一种,所以它支持所有对字符串的序列操作。如下:
>>> L=[123,'spam',0.5] #定义一个含有三个元素的列表
>>> len(L) #计算列表中的元素个数
3
>>> L[0] #对列表进行切片索引
123
在列表中,它没有固定类型的约束,也没有固定大小,所以可以按照所需要的要求随意增加或减少列表大,用法如下:
>>> L.append('learn')
>>> L
[123, 'spam', 1.23, 'learn']
>>> L.pop(2) 1.23 >>> L [123, 'spam', 'learn']
>>> L.insert(1,'python') >>> L [123, 'python', 'spam', 'learn'] >>> L.remove(123) >>> L ['python', 'spam', 'learn']
列表中的append用法可以在列表的尾部插入一项来扩充列表的大小,pop方法则是可以移除所想要移除的一项。在任意位置插入元素可以使用insert方法。想要移除所知道值得元素可以用remove方法。由于列表是可变的,所以大多数方法会直接改变列表,而不是创建新列表。
在列表中还有一些特定的操作,比如sort方法排序操作(默认按照升序对列表排序),reverse对列表进行翻转:
>>> L.sort() >>> L ['learn', 'python', 'spam'] >>> L.reverse() >>> L ['spam', 'python', 'learn']
字典:
说完列表要来说说字典。Python内置dict作为定义字典的关键字,在其他语言中也称为map,使用键-值对(key-value)的方式存储,具有极快的查找速度例子:查找对应同学的某科对应的成绩,若用list就需要两个,如果用字典实现的话,直接可以用名字-成绩的对照表关联,直接根据名字查到成绩,并且无论表有多长,查找的速度都不会改变。
List方式:
name=[‘Paul’,’Jack’,‘Tom’]
points=[98,95,90]
dic方式:
d={‘Paul’:98,’Jack’:95,’Tom’:90}
d[‘xxx’]就可以查到xxx同学的成绩了。
运用dict查找的方式原理与查书新华字典是一样的。即先在字典索引表中用部首(或用拼音首字母)查询对应字页码,接着就可以直接翻到该页,找到这字。这种查找方法能实现快速查询,不会随字数总数多少而改变。
而list查找的方法就像从字典第一页开始翻到该字为止,这样就会随着list元素量增加,而查找变慢。
Dict的这种key-value存储方式,当放进去值得时候,必须根据key算出value的存放地方。数据在dict里,还可以通过key改变指定的值,并且每次指定都会改变前一次的值。
例如:
d[‘Jack’] = 80
如果key不存在,就会报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'xxx'
为了避免key不存在的错误,有两种方法:
1)通过in判断key是否存在。
如:‘Jack’in d
True
2)通过dict提供的get方法,如果key不存在,可以返回None,或者是自己指定的value值。
d.get(‘xxx’) à None
d.get(‘xxx’,-1) à -1
删除一个key,用pop(key)方法,对应的value也会从dict中删除:
d.pop(‘xxx’) à xxx对应的value,如上面定义的字典xxx:Paul所对应的value就是98。
dict的特点:
1. 查找和插入的速度极快,不会随着key数量的增加而变慢;
2. 需要占用的内存较大,浪费存储较多。
而list相反:
1、查找和插入的速度随元素的数量而变化
2、占用空间小,浪费内存小。
所以,dict与list各自有时间(dict)与空间(list)的优势。
值得注意的是,字典是无序排列:dict存放顺序不等于key放入的顺序。并且key值是“不可变对象”,原因是dict是根据key来计算value的位置,如果key每次的值不同,那么dict内部就杂乱无章了。这种通过key值计算位置的算法称为哈希算法(hash),在Python中,字符串、整数等都是不可变的,list为可变的,所以list不能成为key值。
元组:
元组对象就像一个不可变的列表一样。与列表相同,元组也是序列,但它又是像字符串一样不可变的。它也支持任意类型与任意嵌套的序列操作。
大部分的操作方式与list相似,但它的不变性决定了无法像列表一样可以随意删填元素。(后面也会有更多介绍)