列表(List)
列表是指一组有序的数据集合,可以将各种各样的数据有序的存放在列表 中,并且可以对其进行增删改查,以及遍历。列表的存在是为了通过一个变量存 储更多的信息
通过 len()内置函数可查看列表中元素的个数
>>> len(list)
你可以通过索引来找到列表中每个元素的位置,记住索引是从 0 开始的
>>> shopping_list[2] #找Bike
>>> shopping_list[0] #第一个元素取出来
>>> shopping_list[-1] #-1代表取列表中最后一个元素'Gift'
>>> shopping_list[-3] #取倒数第3位元素'Clothes'
>>> shopping_list[-4] #取倒数第4个元素
切片(Slice)
你还可以从列表中取出指定多个元素,这种操作叫做切片
>>> shopping_list[0:3] #取0到第3个元素,不包括第4个
>>> shopping_list[:3] #同上,取0到第3个元素,不包括第4个,0可以不写
>>> shopping_list[2:5] #取第3至第5个元素
>>> shopping_list[:-3] #取从0至倒数第3个元素
>>> shopping_list[-3:] #取最后3个元素
>>> shopping_list[1:8:2] #从1至8隔一个取一个,后面的2是步长,即每隔几个元素取一个
>>> shopping_list[::2] #从头到位每隔一个取一个
增删改查
>>> shopping_list.append('MovieTicket') #向列表后面追加一个元素
>>> shopping_list.pop() #删除最后一个元素
>>> shopping_list.remove('Mac') #删除叫’Mac’的元素,如果有多个’Mac’,那会删除从左边数找到的第一 个
>>> shopping_list[2] = 'COFFEE' #将索引为2的元素改为”COFFEE”,原来是小写
>>> shopping_list.insert(3,"Toy") #插入一个新元素,索引为3
>>> shopping_list.index('Toy') #返回’Toy’元素的索引值,如果有多个相同元素,则返回匹配的第一个
>>> shopping_list.append('Food')
>>> shopping_list.count('Food') #统计’Food’的元素的个数,刚添加了一个,所以现在是2个
>>> list2= ['Banana','Apple'] #创建一个新列表
>>> shopping_list.extend(list2) #把上面的新列表合并到shopping_list中
>>> shopping_list.sort() #将列表排序
>>> shopping_list.reverse() #将列表反转
>>> del shopping_list[3:8] #删除索引3至8的元素,不包括8
>>> for i in shopping_list: #遍历列表
... print i
元组(Tuple)
另一种有序列表叫元组:tuple。tuple 和 list 非常类似,但是 tuple 一旦初始化就不能修改, 比如同样是列出同学的名字
>>> classmates = ('Michael', 'Bob', 'Tracy')
只有1个元素的tuple定义时必须加一个逗号 ,来消除歧义:
>>>> t = (1,)
字典(Dict)
列表允许你通过一个变量存储大量的信息,但试想以下场景,用列表实现就可能 效率较低了:
存储的信息量越来越多,有的时候找一个数据可能要循环整个列表,耗时较
长。
单个元素包含的信息量变多时,比如,之前只是存储姓名列表,现在是要存
储姓名、年龄、×××号、地址、工作等这个人的很多信息,用列表去存储
很费劲
要求存储的数据是不重复,我们知道列表是允许的重复值的,当然想存储时
就让我的数据默认就是唯一的话,用列表就不可以了
以上这些是列表不擅长的地方,却恰恰是我们接下来要讲的 dict 所擅长的方面,dict 使用 key-value 的形式存储数据,dict 的 key 是唯一的,所以你可以通过 key来唯一的定位到你的数据。之所以叫字典(在其它语言中称为 map),是因为 dict的数据结构跟我们生活中用的字典是一样的,查英文字典时,输入单词,就可以 定位到这个单词意思的详细解释,其中这个单词就是 key,对应的词义解释就是value.字典有如下特点:
key-value 格式,key 是唯一的
无序,与列表有序的特点不同,字典是无序的,列表只所以有序是因为你需
要通过索引来定位相应元素,而字典已经可以通过 key 来定位相应 value,因 此为了避免浪费存储空间,字典不会对数据的位置进行纪录,当然如果你想 让其变成有序的,也是有方法的,这个我们以后再讲。
查询速度很快,dict是基于hash表的原理实现的,是根据关键字(Keyvalue) 而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个 函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映 射函数称做散列函数,存放记录的数组称做散列表。由于通过一个 key 的索 引表就直接定位到了内存地址,所以查询一个只有 100 条数据的字典和一个100 万条数据的字典的速度是查不多
好了,来看看 dict 的语法:>>> info = {'name':'alex',
'job':'engineer', 'age': 29, 'company':'AUTOHOME'
} >>> info
{'age': 29, 'job': 'engineer', 'company': 'AUTOHOME', 'name': 'alex'}
增删改查
>>> info['name'] #查看key为’name’的value
"alex"
>>> info['job'] = 'Boss' #将key 的value 改为’Boss’
>>> info
{'age': 29, 'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex'}
>>> info['city'] = 'BJ' #如果dict中有key为’city’,就将其值改为’BJ’,如果没有这个key,就创建一条新 纪录
>>> info
{'age': 29, 'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex', 'city': 'BJ'}
>>> info.pop('age') #删除key为’age’的数据,跟del info[‘age’] 一样
29
>>> info
{'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex', 'city': 'BJ'}
>>> info.popitem() #随机删除一条数据,dict为空时用此语法会报错
('job', 'Boss')
>>> info.items() #将dict的key,value转换成列表的形式显示
[('company', 'AUTOHOME'), ('name', 'alex'), ('city', 'BJ')]
>>> info.has_key('name') #判断字典中是否有个叫’name’的key
True
>>> info['age'] #查找一个不存在的key报错,因为’age’刚才已经删除了,所以报错Traceback (most recent call last):
File "
KeyError: 'age'
>>> info.get('age') #
>>> info.get('name')
'alex'
>>> info.clear() #清空dict
>>> info
{}
>>> info.fromkeys(['a','b','c'],'Test') #根据列表[‘a’,’b’,’c’]来创建dict里的key,后面 的’Test’是默认value,如果不指定的话则为None
{'a': 'Test', 'c': 'Test', 'b': 'Test'}
>>> info
{}
>>> info =info.fromkeys(['a','b','c'],'Test')
>>> info
{'a': 'Test', 'c': 'Test', 'b': 'Test'}
>>> info.setdefault('d','Alex') #找一个key为’d’的纪录,如果这个key不存在,那就创建一个叫’d’的key,并且将其value设置为’Alex’, 如果这个key存在,就直接返回这个key的value,见下一条
'Alex'
>>> info.setdefault('c','Alex')
'Test'
>>> info
{'a': 'Test', 'c': 'Test', 'b': 'Test', 'd': 'Alex'}
>>> dict2 = {'e':'fromDict2','a':'fromDict2'} #创建一个新字典
>>> info.update(dict2) #拿这个新字典去更新info,注意dict2中有一个key值’a’与dict info相冲突,这 时dict2的值会覆盖info中的a,如果dict2的key在info中不存在,则创建相应的纪录
>>> info
{'a': 'fromDict2', 'c': 'Test', 'b': 'Test', 'e': 'fromDict2', 'd': 'Alex'}