首页 > 其他 > 详细

基础知识回顾——列表和字典

时间:2017-01-14 13:36:04      阅读:253      评论:0      收藏:0      [点我收藏+]

列表

列表是可以改变的序列,所有的通用序列操作都适用,且存在一些专门的方法。

1.列表基本操作

 1 #元素赋值
 2 >>> x = [1,1,3]
 3 >>> x[1] = 2
 4 >>> x
 5 [1, 2, 3]
 6 
 7 #分片赋值
 8 >>> name = list(Ryana)
 9 >>> name
10 [R‘, y‘, a‘, n‘, a]
11 >>> name[2:] = ita12 >>> name
13 [R‘, y‘, i‘, t‘, a‘]

 

2.列表方法

1)append:用于在列表末尾添加新的对象(注:直接修改原来的列表)

1 >>> list1 = [1,2,4]
2 >>> list1.append(8)
3 >>>list1                                                                                                                
[1, 2, 4, 8]

2)count:用于统计某个元素在列表中出现的次数

1 >>> [to‘,be‘,or‘,not‘,to‘,be‘].count(o)
2 0
3 >>> [to‘,be‘,or‘,not‘,to‘,be‘].count(to)
4 2

3)extend:用于一次性在列表末尾添加另一个序列的多个值

1 >>> a = [1,2,3]
2 >>> b = [4,5,6]
3 >>> a.extend(b)
4 >>> a
5 [1, 2, 3, 4, 5, 6]

4)index:用于从列表中找出某个值第一个匹配项的索引位置

1 >>> lst = [to‘,be‘,or‘,not‘,to‘,be]
2 >>> lst.index(to)
3 0

5)insert:用于将对象插于列表中,.insert(位置,元素)

1 >>> nums = [1,3,6,7]
2 >>> nums.insert(2,5)
3 >>> nums
4 [1, 3, 5‘, 6, 7]
5 >>> nums.insert(2,5)
6 >>> nums
7 [1, 3, 5, 5‘, 6, 7]

6)pop:用于移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值

1 >>> x = [1,3,5]
2 >>> x.pop()
3 5
4 >>> x.pop(0)
5 1
6 >>> x
7 [3]

7)remove:用于移除列表中某个值的第一个匹配项,不存在的元素报错

 1 >>> list1 = [to‘,be‘,or‘,not‘,to‘,be]
 2 >>> list1.remove(be)
 3 >>> list1
 4 [to‘, or‘, not‘, to‘, be]
 5 >>> x.remove(bee)
 6 
 7 Traceback (most recent call last):
 8   File "<pyshell#38>", line 1, in <module>
 9     x.remove(bee)
10 ValueError: list.remove(x): x not in list

8)reverse:用于将列表中的元素反向存放(注:reversed函数返回的是一个迭代器对象)

1 >>> x = [1,3,5]
2 >>> x.reverse()
3 >>> x
4 [5, 3, 1]

9)sort:用于在原始位置对列表进行排序(注:sorted函数会返回一个有序副本)

1 >>> x = [7,9,1,0,5]
2 >>> x.sort()
3 >>> x
4 [0, 1, 5, 7, 9]

10)高级排序

 1 #cmp(x,y):x<y,返回负数;x>y,返回整数
 2 
 3 >>> cmp(99,100)
 4 -1
 5 >>> cmp(4,1)
 6 1
 7 
 8 #key参数:为每个元素创建一个键,然后所以元素根据键来排序
 9 
10 >>> x = [c++‘,python‘,go‘,java]
11 >>> x.sort(key=len)
12 >>> x
13 [go‘, c++‘, java‘, python‘]

 

字典

字典是python中唯一内建的映射类型,字典中的值并没有特殊的顺序,都是存储在一个特定的键下,键可以是数字、字符串甚至是元组。

1.字典的基本操作:同序列类似

1)创建字典

 1 #通过序列建立字典 
 2 >>> item = [(name,Ryana),(age,12)]
 3 >>> d = dict(item)
 4 >>> d
 5 {age: 12, name: Ryana}
 6  
 7 #通过关键字参数创建字典 
 8 >>> d = dict(name = Ryana,age = 12)
 9 >>> d
10 {age: 12, name: Ryana}

2)len(d):返回字典d的长度

3)d[k]:返回键k的值

4)d[k] = v:将值v关联到键k

5)del d[k] :删除键k的项

6)k in d :检查d是否含有键为k的项  (注:字典查找的是键,序列查找的是值,数据结构的规模越大,字典检查成员资格比列表更高效)

7)字典的键可以是任意的不可不类型,比如浮点数、字符串或者元组

8)字典格式化字符串

1 >>> phonebook = {ann:5570,beth:7102}
2 >>> "beth‘s phone number is %(beth)s " %phonebook
3 "beth‘s phone number is 7102 "

 

2.字典方法

1)clear:用于清除字典中的所有项,原地操作

 1 >>> x = {}
 2 >>> y = x
 3 >>> x[key] = value
 4 >>> y
 5 {key: value}
 6 >>> x.clear()
 7 >>> x
 8 {}
 9 >>> y
10 {}

2)copy:返回一个具有相同键-值对的新字典,这个方法实现的是浅拷贝,浅拷贝只拷贝数据不拷贝数据之间的关系,新的数据和旧的数据使用的是同一块内存空间;深拷贝既拷贝数据又拷贝数据之间的关系,新的数据和旧的数据使用的是不同的内存空间,需要copy模块的deepcopy函数完成

 1 >>> import copy
 2 >>> d = {s:shenzhen,w:wuhan}
 3 >>> d1 = copy.copy(d)    #浅拷贝
 4 >>> d1
 5 {s: shenzhen, w: wuhan}
 6 >>> d2 = copy.deepcopy(d)   #深拷贝
 7 >>> d2
 8 {s: shenzhen, w: wuhan}
 9 >>> d[b] = beijing       #新增子项
10 >>> d1
11 {s: shenzhen, w: wuhan}
12 >>> d2
13 {s: shenzhen, w: wuhan}
14 >>> d[s] = shanghai   #改变子项
15 >>> d1
16 {s: shenzhen, w: wuhan}
17 >>> d2
18 {s: shenzhen, w: wuhan}

可以发现原字典做新增或者改变子项操作,根本不影响d1和d2,都是深拷贝??再看一例:

 1 >>> import copy
 2 >>> d = {s:[shenzhen,shang],w:wuhan}
 3 >>> d1 = copy.copy(d)
 4 >>> d1
 5 {s: [shenzhen, shang], w: wuhan}
 6 >>> d2 = copy.deepcopy(d)
 7 >>> d2
 8 {s: [shenzhen, shang], w: wuhan}
 9 >>> d[b] = beijing       #新增子项
10 >>> d1
11 {s: [shenzhen, shang], w: wuhan}
12 >>> d2
13 {s: [shenzhen, shang], w: wuhan}
14 >>> d[s][1] = shanghai    #改变子项
15 >>> d1
16 {s: [shenzhen, shanghai], w: wuhan}
17 >>> d2
18 {s: [shenzhen, shang], w: wuhan}

发现差别了没,这次改变子项影响了d1,没影响d2。

总结:当只有一级目录,原字典的操作,对浅拷贝和深拷贝都没有影响;当目录不是一级,原字典的改变子项操作影响浅拷贝,不影响深拷贝。

3)fromkeys:使用给定的键建立新的字典

1 >>> dict.fromkeys([name,age])
2 {age: None, name: None}
3 >>> dict.fromkeys([name,age],unknown)
4 {age: unknown, name: unknown}

4)get:用来访问字典项,即使访问不存在的项也不会出错

1 >>> print d[name]
2 
3 Traceback (most recent call last):
4   File "<pyshell#74>", line 1, in <module>
5     print d[name]
6 KeyError: name
7 >>> print d.get(name)
8 None

5)items和iteritems:items将字典的所有项以列表的方式返回,iteritems作用类似,但会返回一个迭代器对象

1 >>> dict1= {ann:5570,beth:7102}
2 >>> dict1.items()
3 [(ann, 5570), (beth, 7102)]
4 >>> it = dict1.iteritems()
5 >>> it
6 <dictionary-itemiterator object at 0x036B3600>
7 >>> list(it)
8 [(ann, 5570), (beth, 7102)]

6)keys和iterkeys:keys方法将字典中的键以列表形式返回,而iterkeys返回针对键的迭代器

values和itervalues:values方法将字典中的键以列表形式返回,且可以有重复的元素,而itervalues返回针对键的迭代器

1 >>> d = {a:1,b:2,c:3}
2 >>> d.values()
3 [1, 3, 2]
4 >>> d.keys()
5 [a, c, b]
6 >>> d.iterkeys()
7 <dictionary-keyiterator object at 0x0314D660>
8 >>> d.itervalues()
9 <dictionary-valueiterator object at 0x0314D6C0>

7)pop:用来取出对于给定键的值

1 >>> dic = {ann:5570,beth:7102}
2 >>> dic.pop(ann)
3 5570
4 >>> dic
5 {beth: 7102}

8)popitem:随机弹出字典中的一项,字典没有顺序概念

1 >>> dic = {ann:5570,beth:7102,claire:0551}
2 >>> dic.popitem()
3 (ann, 5570)

9)update:可以利用一个字典更新另外一个字典,若有相同的键则会覆盖

1 >>> dic1 = {ann:5570,beth:7102s:shanghai}
2 >>> dic2 = {s:shenzhen,w:wuhan}
3 >>> dic1.update(dic2)
4 >>> dic1
5 {ann: 5570, beth: 7102, s: shenzhen, w: wuhan}

 

总结:列表是可变的序列,有append()、count()、extend()、index()、insert()、pop()、remove()、reverse()、sort()等方法

   字典是映射类型,键值成对没有顺序,有clear()、copy()、fromkeys()、get()、pop()、update()等方法

基础知识回顾——列表和字典

原文:http://www.cnblogs.com/Ryana/p/5971161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!