出自:https://blog.csdn.net/gavin_john/article/details/49893469
列表和字典这两种类型几乎是Python所有脚本的主要工作组件。
======================================================================================
列表
列表是:
任意对象的有序集合
通过偏移读取
可变长度、异构以及任意嵌套
属于可变序列的分类
对象引用数组
======================================================================================
基本的列表操作,前面已经有学过,这里只记录没学过或比较重要的
1.内置函数map,它对序列中的各项应用一个函数并把结果收集到一个新的列表中:
- >>> list(map(abs,[-1,-2,-3,1,2,3]))
- [1, 2, 3, 1, 2, 3]
- >>> L = [1,2,3]
- >>> L[:2]=[9,8]
- >>> L
- [9, 8, 3]
- >>> L
- [9, 8, 3]
- >>> L[1:2]=['a','b','c']
- >>> L
- [9, 'a', 'b', 'c', 3]
(1)删除。删除等号左边指定的分片
(2)插入。将包含在等号右边对象中的片段插入旧分片被删除的位置。
--所以,插入元素的数目不需要与删除的数目相匹配。
--所以,分片赋值能够用来替换(覆盖)、增长(插入)、缩短(删除)主列表,这是功能强大的操作。
3.列表排序 sort,我们可以通过传入关键字参数来修改排序行为--这是指定按名称传递的函数调用中特殊的“name=value”语法。
在排序中,key参数给出了一个单个参数的函数,它返回在排序中使用的值,reverse参数允许排序按照降序而不是升序进行。
- >>> L = ['abc','ABD','aBc']
- >>> L.sort()
- >>> L
- ['ABD', 'aBc', 'abc']
- >>> L = ['abc','ABD','aBc']
- >>> L.sort(key=str.lower)
- >>> L
- ['abc', 'aBc', 'ABD']
- >>> L = ['abc','ABD','aBc']
- >>> L.sort(key=str.lower,reverse=True)
- >>> L
- ['ABD', 'abc', 'aBc']
- >>> L = ['abc','ABD','aBe']
- >>> sorted(L,key=str.lower,reverse=True)
- ['aBe', 'ABD', 'abc']
- >>> L = ['abc','ABD','aBe']
- >>> sorted([x.lower() for x in L],reverse=True)
- ['abe', 'abd', 'abc']
4.extend和pop方法分别能够在末端插入多个元素、删除一个元素。也有一个reversed内置函数,像sorted一样地工作,但是,它必须包装在一个list调用中,因为它是一个迭代器。
- >>> L =[1,2]
- >>> L.extend([3,4,5])
- >>> L
- [1, 2, 3, 4, 5]
- >>> L.pop()
- 5
- >>> L
- [1, 2, 3, 4]
- >>> L.reverse()
- >>> L
- [4, 3, 2, 1]
- >>> list(reversed(L))
- [1, 2, 3, 4]
- >>> L
- [4, 3, 2, 1]
- >>> L.append(5)
- >>> L
- [4, 3, 2, 1, 5]
- >>> L.pop()
- 5
- >>> L
- [4, 3, 2, 1]
- >>> L = ['spam','eggs','ham']
- >>> L.index('eggs')
- 1
- >>> L.insert(1,'toast')
- >>> L
- ['spam', 'toast', 'eggs', 'ham']
- >>> L.remove('eggs')
- >>> L
- ['spam', 'toast', 'ham']
- >>> L.pop(1)
- 'toast'
- >>> L
- ['spam', 'ham']
由于列表是可变的,你可以用del语句在原处删除某项或某片段:
- >>> L
- ['SPAM!', 'eat', 'more', 'please']
- >>> del L[0]
- >>> L
- ['eat', 'more', 'please']
- >>> del L[1:]
- >>> L
- ['eat']
==========================================================================================
字典
除了列表之外,字典也许是Python之中最灵活的内置数据结构类型。如果把列表看做是有序的对象集合,那么就可以把字典当成是无序的集合。它们主要的差别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
Python字典主要属性如下:
通过键而不是偏移量来读取
任意对象的无序集合
可变长、异构、任意嵌套
属于可变映射类型
对象引用表
【字典是唯一内置的映射类型(键映射到值的对象)】
字典解析:
- >>> D = {x:x*2 for x in range(10)}
- >>> D
- {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}
- >>> D
- {'eggs': 3, 'ham': 1, 'spam': 2}
- >>> D2 = {'toast':4,'muffin':5}
- >>> D.update(D2)
- >>> D
- {'eggs': 3, 'muffin': 5, 'ham': 1, 'spam': 2, 'toast': 4}
- >>> D2['muffin']=999
- >>> D.update(D2)
- >>> D
- {'muffin': 999, 'eggs': 3, 'ham': 1, 'spam': 2, 'toast': 4}
- >>> D.pop('spam')
- 2
- >>> D
- {'muffin': 999, 'eggs': 3, 'ham': 1, 'toast': 4}
【4】.字典用于稀疏数据结构
【5】.使用字典作为“记录”
【6】.创建字典的其他方法:
- (1){'name':'mel','age':45}
- (2) D = {}
- D['name']='mel'
- D['age']=45
- (3)dict(name='mel',age=45)
- (4)dict([('name','mel'),('age',45)])
如果所有键的值都相同,也可以用如下特殊形式对字典进行初始化:
- >>> dict.fromkeys(['a','b'],0)
- {'a': 0, 'b': 0}
- >>> list(zip(['a','b','c'],[1,2,3]))
- [('a', 1), ('b', 2), ('c', 3)]
- >>> dict(zip(['a','b','c'],[1,2,3]))
- {'a': 1, 'b': 2, 'c': 3}
- >>> D = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
- >>> D
- {'a': 1, 'b': 2, 'c': 3}
- >>> D ={x :x**2 for x in range(1,6)}
- >>> D
- {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
- >>> D = {c.lower():c+'!' for c in['SPAM','EGGS','HAM']}
- >>> D
- {'eggs': 'EGGS!', 'ham': 'HAM!', 'spam': 'SPAM!'}
【7】:排序字典键
- D={ ... }
- for k in sorted(D.keys()):
- ...
【8】:has_key方法已死:in永生
- >>> D
- {'a': 1, 'b': 2, 'c': 3}
- >>> D.has_key('a')
- Traceback (most recent call last):
- File "<pyshell#77>", line 1, in <module>
- D.has_key('a')
- AttributeError: 'dict' object has no attribute 'has_key'
- >>> 'a' in D
- True
- >>> 'a' in D.keys()
- True
- >>> D.get('c',0)
- 3
- >>> D.get('d',0)
- 0