python原生的一点东西【2】

不要手贱在遍历一个集合的时候修改它,如果有操作,新建一个临时变量接盘就好了

1.del

a=range(0,2)  
del a[1]  
#最后a是[0]

2. filter()

过滤一个list

def f(x): return x % 3 == 0 or x % 5 == 0  
filter(f, range(2, 25))  
#[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]

3.map()

遍历list,分别对元素进行处理

map(lambda x:x**2,range(0,8))  
#[0, 1, 4, 9, 16, 25, 36, 49]

如果两个list,长度一样,还可以匹配操作,这个很实用

map(lambda x,y:x**2+y,range(0,8),range(0,8))  
[0, 2, 6, 12, 20, 30, 42, 56]

4.reduce()

累加操作把一个list,从开始前两个进行运算,然后运算结果作为参数,取出list接下来一个,组成两个运算数,继续进行,叠加操作

reduce(lambda x,y:x+y,range(0,8))  
#28

5.元组tuples

不可变的list,嗯,一般是需要一个固定大小,内容可知的list。显式声明 使用场景上,和list相比,tuples更倾向于做一个上层包袱,可以放不同类型的元素。而list更倾向于做一个传统的可变数组

t=1,2,3  
#等同与t=(1,2,3)
x, y, z = t  
#x,y,z分别等于1,2,3

5.无序集合set

set()其实也是一个内置去重方法,比如set([1,1,2,3,4,4])
得到了set(1,2,3,4)。需要显式声明的时候,可以a=set(),或者a={}

a = {x for x in 'abracadabra' if x not in 'abc'}  
#set(['r', 'd'])

6.xrange(start,end,step)

步进序列

xrange(0,10,2)  
#0,2,4,6,8

7. reversed()

反转序列

reversed(range(0,3))  
2,1,0  

8.zip(q,b)

并行遍历

questions = ['name', 'quest', 'favorite color']  
answers = ['lancelot', 'the holy grail', 'blue']  
for q, a in zip(questions, answers):  
    print 'What is your {0}?  It is {1}.'.format(q, a)

What is your name?  It is lancelot.  
What is your quest?  It is the holy grail.  
What is your favorite color?  It is blue.

9. enumerate

遍历list的时候,获得坐标和元素值

for i, v in enumerate(['tic', 'tac', 'toe']):  
    print i, v

0 tic  
1 tac  
2 toe  

10.sorted

给一个list去重之后,继续保留顺序

basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']  
for f in sorted(set(basket)):  
    print f

11.iteritems()

遍历一个map的k,v

knights = {'gallahad': 'the pure', 'robin': 'the brave'}  
for k, v in knights.iteritems():  
    print k, v

gallahad the pure  
robin the brave  

以上内容翻译整理自https://docs.python.org/2/tutorial/datastructures.html#

刘摸鱼

退堂鼓表演艺术家

杭州