day2-列表、元组、字典、enumenrate、深浅拷贝

一、列表

 1 # 定义一个列表
 2 >>> names = ['a', 'b', 'c', 'd', 'e']
 3 # 取值
 4 >>> names[0]
 5 'a'
 6 # 切片,只能由左向右切片
 7 # 取1到3之间的元素,包括1,不包括3
 8 >>> names[1:3]
 9 ['b', 'c']
10 # 取1到-1之间的元素
11 >>> names[1:-1]
12 ['b', 'c', 'd']
13 # 取0到3之间的元素,效果等同于names[0:3]
14 >>> names[:3]
15 ['a', 'b', 'c']
16 # 取3到最后一个元素
17 >>> names[3:]
18 ['d', 'e']
19 # 从0到最后一个元素,每隔两个取一个
20 >>> names[0::2]
21 ['a', 'c', 'e']
22 # 开始位置和结束位置可以省略
23 >>> names[::2]
24 ['a', 'c', 'e']
25 # 追加
26 >>> names.append('f')
27 >>> names
28 ['a', 'b', 'c', 'd', 'e', 'f']
29 # 插入
30 >>> names.insert(2,'g')
31 >>> names
32 ['a', 'b', 'g', 'c', 'd', 'e', 'f']
33 # 修改
34 >>> names[5] = '5'
35 >>> names
36 ['a', 'b', 'g', 'c', 'd', '5', 'f']
37 # 删除
38 # 从内存中删除元素
39 >>> del names[0]
40 >>> names
41 ['b', 'g', 'c', 'd', '5', 'f']
42 # 删除最后一个
43 >>> names.pop()
44 'f'
45 >>> names
46 ['b', 'g', 'c', 'd', '5']
47 # 删除某一个下标的值
48 >>> names.pop(1)
49 'g'
50 >>> names
51 ['b', 'c', 'd', '5']
52 # 移除某个元素
53 >>> names.remove('c')
54 >>> names
55 ['b', 'd', '5']
56 # 扩展
57 >>> names2 = [1,2,3,4]
58 >>> names.extend(names2)
59 >>> names
60 ['b', 'd', '5', 1, 2, 3, 4]
61 # 统计5的个数
62 >>> names.count('5')
63 1
64 # 翻转
65 >>> names.reverse()
66 >>> names
67 [4, 3, 2, 1, '5', 'd', 'b']
68 # 排序
69 >>> names.sort()
70 >>> names
71 [1, 2, 3, 4, '5', 'b', 'd']
72 # 计算某个元素的下标
73 >>> names.index('5')
74 4
75 # 清空列表,Python3方法
76 # names.clear()

二、元组
元祖一旦创建,无法修改-->只读列表

 1 # 创建元组
 2 >>> names = ('a', 'b', 'c' ,'d', 'e')
 3 # 取值
 4 >>> names[0]
 5 'a'
 6 # 计算某个元素的个数
 7 >>> names.count('a')
 8 1
 9 # 计算某个元素的下标
10 >>> names.index('b')
11 1
12 # 切片方式与列表相同

 注:如果元组中嵌套列表或者字典,列表和字典中的值是可以被更改的

三、字典

 1 # 创建一个字典
 2 >>> stu_info = {
 3     'name':'ww',
 4     'class':'7',
 5     'city':'sz'
 6     }
 7 # 字典是无序的
 8 >>> stu_info
 9 {'city': 'sz', 'name': 'ww', 'class': '7'}
10 # 取值
11 >>> stu_info['name']
12 'ww'
13 >>> stu_info.get('class')
14 '1'
15 # 增加
16 >>> stu_info['number'] = '777'
17 >>> stu_info
18 {'city': 'sz', 'number': '777', 'name': 'ww', 'class': '7'}
19 # 修改
20 >>> stu_info['class'] = '1'
21 >>> stu_info
22 {'city': 'sz', 'number': '777', 'name': 'ww', 'class': '1'}
23 # del从内存中删除
24 >>> del stu_info['city']
25 >>> stu_info
26 {'number': '777', 'name': 'ww', 'class': '1'}
27 # 根据键删除
28 >>> stu_info.pop('number')
29 '777'
30 >>> stu_info
31 {'name': 'ww', 'class': '1'}
32 # 随机删除
33 >>> stu_info.popitem()
34 ('name', 'ww')
35 >>> stu_info
36 {'class': '1'}
37 # 判断键是否存在
38 >>> 'class' in stu_info
39 True
40 # 输出所有的键
41 >>> stu_info.keys()
42 ['city', 'name', 'class']
43 # 输出所有的值
44 >>> stu_info.values()
45 ['sz', 'ww', '7']
46 # 输出所有的键值
47 >>> stu_info.items()
48 [('city', 'sz'), ('name', 'ww'), ('class', '7')]
49 # 取值,如果没有这个键,则创建
50 >>> stu_info.setdefault("number",'999')
51 '999'
52 >>> stu_info
53 {'city': 'sz', 'number': '999', 'name': 'ww', 'class': '7'}
54 # 合并
55 >>> stu_info2 = {'addr':'hn'}
56 >>> stu_info.update(stu_info2)
57 >>> stu_info
58 {'addr': 'hn', 'city': 'sz', 'number': '999', 'name': 'ww', 'class': '7'}
59 # 初始化一个以列表中的值为键,值均为某个值的字典
60 >>> dict.fromkeys(["name","addr"],"")
61 {'name': '', 'addr': ''}
62 # 清空字典
63 >>> stu_info.clear()
64 >>> stu_info
65 {}

循环字典:

1 # 高效些,以索引的方式取值
2 for i in info:
3     print i,info[i]
4 
5 # 有个把数据转换成列表的过程,数据量大时不建议
6 for k,v in info.items():
7     print k,v

四、enumenrate

 enumenrate:在for循环时,获取列表或者元组的下标值和元素

 1 name_list = [('a',1),('b',2)]
 2 
 3 for index in enumerate(name_list):
 4     print index
 5 
 6 print "-"*30
 7 for index,name in enumerate(name_list):
 8     print index,name
 9 
10 (0, ('a', 1))
11 (1, ('b', 2))
12 ------------------------------
13 0 ('a', 1)
14 1 ('b', 2)

五、深浅拷贝

Python的数据结构总体分为两类:一类:字符串和数字,另外一类:列表、元组、字典等

对于字符串和数字来说,赋值(=)、浅拷贝(copy)和深拷贝(deepcopy)其实都毫无意义,因为它们永远指向同一个内存地址

1. 赋值只是创建一个变量,该变量指向原来的内存地址

1 >>> name1 = [1,2,[3,4],5]
2 >>> name2 = name1
3 >>> id(name1)
4 43002096
5 >>> id(name2)
6 43002096

 2. 浅拷贝是指在内存地址中,只拷贝出第一层的内存的地址,所以拷贝变量和被拷贝变量的内存地址是不一样的

 1 >>>import copy
 2 >>> name3 = copy.copy(name1)
 3 >>> id(name3)
 4 42996560
 5 # 修改name1
 6 >>> name1[0] = 'a'
 7 >>> name1[2][0] = 'c'
 8 >>> name1
 9 ['a', 2, ['c', 4], 5]
10 >>> name3
11 [1, 2, ['c', 4], 5]

浅拷贝的三种方式:

a. copy模块的copy方法

b. 切片:name3 = name1[:]

c. 列表自带方法:name3 = name1.copy()

3. 深拷贝是指在内存中将所有的数据重新创建一份

 1 >>> name4 = copy.deepcopy(name1)
 2 >>> id(name4)
 3 42999040
 4 >>> name4
 5 ['a', 2, ['c', 4], 5]
 6 >>> name1
 7 ['a', 2, ['c', 4], 5]
 8 # 修改name1
 9 >>> name1[1] = 3
10 >>> name1[2][1] = 5
11 >>> name1
12 ['a', 3, ['c', 5], 5]
13 >>> name4
14 ['a', 2, ['c', 4], 5]

 

posted @ 2017-06-20 16:44  不知所以  阅读(115)  评论(0)    收藏  举报