Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中
的元素。
>>>classmates = ['Michael','Bob','Tracy']
>>>classmates
用 len() 函数可以获得 list 元素的个数:
>>>len(classmates)
用索引来访问list 中每一个位置的元素,记得索引是从 0 开始的:
list 是一个可变的有序表,所以,可以往 list中追加元素到末尾,使用append函数
>>>classmates.append('Adam')
>>>classmates
也可以把元素插入到指定的位置,比如索引号为 1 的位置,使用insert函数:
>>>classmates.insert(1,'Jack')
>>>classmates
要删除list 末尾的元素,用 pop() 方法:
>>>classmates.pop()
>>>classmates
要删除指定位置的元素,用 pop(i) 方法,其中 i 是索引位置,也可以使用remove()方法删除:
>>>classmates.pop(1)
>>>classmates
>>>classmates.remove('Bob')
>>>classmates
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>>classmates[1]='Sarah'
>>>classmates
要给列表的元素进行排序可以使用sort()方法,倒序可以使用reverse()方法:
>>>classmates.sort()
>>>classmates
>>>classmates.reverse()
>>>classmates
list 里面的元素的数据类型也可以不同,list 元素也可以是另一个list
>>>classmates = ['Michael','Bob',['asp','php'],'Tracy']
>>>classmates
list中的元素就像队列,我们可以使用切片的方法来存取它们的任意部分。[start:stop:step]即[开始索引:结束索引:步长值],注意:步长值不能为0。
2. 另一种有序列表叫元组:tuple。tuple和 list非常类似,但是 tuple 一旦初始化就不能修改
使用括号 () 可以表示 tuple。
tuple 所谓的“不变”是说,tuple 的每个元素,指向永远不变。即指向 'a' ,就不能改成指向 'b' ,指向一个 list,就不能改成指向其他对象,但指向的这个list 本身是可变的!创建一个内容也不变的 tuple,就必须保证 tuple 的每一个元素本身也不能变。list 和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。
tuple 常用的两个方法是:count()统计某个元组元素的个数和index()返回某个元素的下标。
注意:单个tuple元素的时候,元素后面要加‘,’,否则python解释器不会识别成tuple类型。
3. Python 内置了字典:dict 的支持,dict全称 dictionary,在其他语言中也称为 map,使用键-值(key-value)存储,具有极快的查找速度。字典由键和对应值成对组成。字典也被称作关联数组或哈希表。
字典的创建:
直接创建字典
>>>d={'one':1,'two':2,'three':3}
>>>print d
通过dict创建字典或者通过关键字创建字典
>>>items=[('one',1),('two',2),('three',3),('four',4)]
>>>print u'items中的内容:'
>>>print items
>>>print u'利用dict创建字典,输出字典内容:'
>>>d=dict(items)
>>>print d
注意:
每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。
值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。
字典的方法:
clear函数:清除字典中的所有项
copy函数:返回一个具有相同键值的新字典
fromkeys函数:使用给定的键建立新的字典,键默认对应的值为Non
get函数:访问字典成员,get函数可以访问字典中不存在的键,当该键不存在是返回None
has_key函数:检查字典中是否含有给出的键
items和iteritems函数:items将所有的字典项以列表方式返回,列表中项来自(键,值),iteritems与items作用相似,但是返回的是一个迭代器对象而不是列表
keys和iterkeys:keys将字典中的键以列表形式返回,iterkeys返回键的迭代器
pop函数:删除字典中对应的键
popitem函数:移出字典中的项
setdefault函数:类似于get方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值
update函数:用一个字典更新另外一个字典
values和itervalues函数:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由于在字典中值不是唯一的,所以列表中可以包含重复的元素
把数据放入dict 的方法,除了初始化时指定外,还可以通过key放入:由于一个key 只能对应一个 value,所以,多次对一个 key放入 value,后面的值会把前面的值冲掉:1.要避免key 不存在的错误,有两种办法,一是通过 in 判断 key是否存在:2.通过dict 提供的 get方法,如果 key不存在,可以返回 None,或者自己指定的value:
注意:dict 内部存放的顺序和 key放入的顺序是没有关系的。
和list 比较,dict有以下几个特点:
1. 查找和插入的速度极快,不会随着 key 的增加而增加;
2. 需要占用大量的内存,内存浪费多。
而list 相反:
1. 查找和插入的时间随着元素的增加而增加;
2. 占用空间小,浪费内存很少。
所以,dict 是用空间来换取时间的一种方法。
dict 可以用在需要高速查找的很多地方,在 Python代码中几乎无处不在,正确使用 dict非常重要,需要牢记的第一条就是dict 的key必须是不可变对象。
这是因为dict 根据 key来计算 value 的存储位置,如果每次计算相同的 key 得出的结果不同,那dict 内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash 的正确性,作为key 的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而 list是可变的,就不能作为 key:set和 dict 类似,也是一组key的集合,但不存储 value。由于 key 不能重复,所以,在 set中,没有重复的key。
set和 dict 的唯一区别仅在于没有存储对应的 value,但是,set的原理和 dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证 set内部“不会有重复元素”。