chapter4 python技巧
2015-09-11 11:24
579 查看
1.深拷贝和浅拷贝
1.1 copy模块
FUNCTIONS
copy(x)
Shallow copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
deepcopy(x, memo=None, _nil=[])
Deep copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
copy(x)方法是浅拷贝,如果x中全是不可修改变量则拷贝之后修改毫无影响,但是如果是可修改的对象,则浅拷贝只是拷贝对象引用,拷贝之后修改可以影响到原来的对象
>>> s1 = [1,3,4,5] >>> s2 = copy.copy(s1) >>> s2[0] = 2 >>> s2 [2, 3, 4, 5] >>> s1 = [1,3,4,[1,3,4]] >>> s2 = copy.copy(s1) >>> s2[-1][0] = 2 >>> s1 [1, 3, 4, [2, 3, 4]] >>> s2 [1, 3, 4, [2, 3, 4]]
deepcopy则是全部生成全新对象,修改之后相互不影响
1.2 替代方法
常用的替代方法则有list(),dict()等,作用等同于浅拷贝
>>> s2 = list(s1) >>> >>> s2 [1, 3, 4, [2, 3, 4]] >>> s1 [1, 3, 4, [2, 3, 4]] >>> s2[-1][0] = 1 >>> s2 [1, 3, 4, [1, 3, 4]] >>> s1 [1, 3, 4, [1, 3, 4]]
2. 列表推导(略)
3. 若列表存在元素则返回
def list_get(L, i, v=None): if -len(L) <= i < len(L):return L[i] else:return v
这个函数有趣的地方在于逻辑表达式。
4. 循环访问序列中的元素和索引
sequence = [] for index, item in enumerate(sequence): if item > 23: sequence[index] = 'dddd'
其实题中可以用列表推导过滤,也可以用filter,map等函数,不过性能来说枚举最优
5.在无需共享引用的条件下创建列表的列表
最简单的方法
>>> s1 = [[0]*4]*5 >>> s1[0][0] = 2 >>> s1 [[2, 0, 0, 0], [2, 0, 0, 0], [2, 0, 0, 0], [2, 0, 0, 0], [2, 0, 0, 0]]
所以这种方法并不能使用,所以我们就使用列表推导来完成
>>> s1 = [[i for i in range(5)] for t in range(4)] >>> s1 [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
6.展开一个嵌套
def list_or_tuple(x): return isinstance(x,(list,tuple)) def flatten(sequence, to_expand=list_or_tuple): for item in sequence: if to_expand(item): for subitem in item: yield subitem else: yield item sequence = [[1,2,3,4],[3,5],4,6,9] for x in flatten(sequence): print x,
这里面flatten函数是个迭代器,yield关键字的重要应用,还有to_expand是一个函数对象,完美的函数
7.8.(略)可使用numby矩阵控制方法
9.从字典取值
>>> d = dict(c=5) >>> d {'c': 5} >>> d.get('c') 5 >>> d.get('d','not found') 'not found'
10.给字典增加一个条目
利用字典方法的setdefault(key,vlaue)如果key存在则返回value值,如果key值不存在,则增加key,value键值对
>>> def additem(dict1, key, value): return dict1.setdefult(key,[]).append(value)
11 .创建字典
t = dict(a=2, b=3)
12.交替的使用列表元素做为键值对来创建字典
>>> def dicFromList(keysAndValues): return dict(zip(keysAndValues[::2],keysAndValues[1::2]))
这个方法运用的太赞了~~~!!!
13
相关文章推荐
- python爬虫:一些常用的爬虫技巧
- python技巧 使用值来排序一个字典
- Python 30 个技巧
- Python 字符的处理的两个技巧(增加,分离)
- Python 代码性能优化技巧
- Python中对象迭代与反迭代的技巧总结
- [Python]网络爬虫(五):urllib2的使用细节与抓站技巧
- 用python爬虫抓站的一些技巧总结
- 【转】Python 代码调试技巧
- python常用技巧
- Python高效编程的19个技巧
- python技巧积累
- Python性能优化技巧
- python 从入门到实践 第五章习题 (高级编程技巧 week3-1)
- python实用技巧 : Filtering os.walk(转)
- 用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧
- python使用技巧,持续更新中。。。
- 自学Python之Python基础:(六)可迭代对象与反迭代技巧
- Python使用技巧集合
- Python 内编写类的各种技巧和方法