列表(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] #
18隔一个取一个,后面的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] #
删除索引38的元素,不包括8
>>> for i in shopping_list: #
遍历列表
... print i 



元组(Tuple)

另一种有序列表叫元组:tupletuple list 非常类似,但是 tuple 一旦初始化就不能修改, 比如同样是列出同学的名字 

>>> classmates = ('Michael', 'Bob', 'Tracy') 

只有1个元素的tuple定义时必须加一个逗号 ,来消除歧义: 

>>>> t = (1,)



字典(Dict)

列表允许你通过一个变量存储大量的信息,但试想以下场景,用列表实现就可能 效率较低了:

  1. 存储的信息量越来越多,有的时候找一个数据可能要循环整个列表,耗时较

    长。

  2. 单个元素包含的信息量变多时,比如,之前只是存储姓名列表,现在是要存

     储姓名、年龄、×××号、地址、工作等这个人的很多信息,用列表去存储

    很费劲

  3. 要求存储的数据是不重复,我们知道列表是允许的重复值的,当然想存储时

      就让我的数据默认就是唯一的话,用列表就不可以了

以上这些是列表不擅长的地方,却恰恰是我们接下来要讲的 dict 所擅长的方面,dict 使用 key-value 的形式存储数据,dict key 是唯一的,所以你可以通过 key来唯一的定位到你的数据。之所以叫字典(在其它语言中称为 map),是因为 dict的数据结构跟我们生活中用的字典是一样的,查英文字典时,输入单词,就可以 定位到这个单词意思的详细解释,其中这个单词就是 key,对应的词义解释就是value.字典有如下特点:

  1. key-value 格式,key 是唯一的

  2. 无序,与列表有序的特点不同,字典是无序的,列表只所以有序是因为你需

    要通过索引来定位相应元素,而字典已经可以通过 key 来定位相应 value,因 此为了避免浪费存储空间,字典不会对数据的位置进行纪录,当然如果你想 让其变成有序的,也是有方法的,这个我们以后再讲。

  3. 查询速度很快,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() #
dictkey,value转换成列表的形式显示
[('company', 'AUTOHOME'), ('name', 'alex'), ('city', 'BJ')]
>>> info.has_key('name') #
判断字典中是否有个叫’name’key
True
>>> info['age'] #
查找一个不存在的key报错,因为’age’刚才已经删除了,所以报错Traceback (most recent call last):

File "<stdin>", line 1, in <module>
KeyError: 'age'
>>> info.get('age') #
查找key,如果存在则返回其value,否则则返回None
>>> 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存在,就直接返回这个keyvalue,见下一条
'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,如果dict2keyinfo中不存在,则创建相应的纪录
>>> info
{'a': 'fromDict2', 'c': 'Test', 'b': 'Test', 'e': 'fromDict2', 'd': 'Alex'}