您的位置:首页 > 编程语言 > Python开发

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



 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: