python-cookbook学习笔记十 迭代器 三

来源:互联网 发布:苹果mac回收 编辑:程序博客网 时间:2024/06/09 15:40
如果我们想得到一个集合中元素的所有的组合或者排列。这里可以用到itertools.permutations 这个函数的作用是生成一个排列。
def iter_combinations():    items=['a','b','c']    for p in permutations(items):        print p

结果如下:


如果我只是想得到指定长度的排列。也可以指定长度permutations(items,2):



如果我们只想得到组合呢。这里解释下组合和排列的区别。这个是概率论上的概念。这个主要是看是否和顺序有关,不考虑顺序就是排列。比如a,b,ca,c,b是两种不同的排列。但是组合就要考虑顺序,例如a,b,ca.c.b就是同一个组合。要得的所有的组合,这里要用到itertools.combinations.代码改成如下:
def iter_combinations():    items=['a','b','c']    for p in combinations(items,3):        print p
可以看到只有一个组合。



但是如果选择2个元素的话(combinations(items,2)),则有多个组合。




打开一个文件的时候,是对文件逐行的扫描。很多时候我们都期望同时得到文件的行号以及内容。这里可以用到enumerate
f=open(r'E:\py_prj\README.TXT','rb')for line,content in enumerate(f):    print line,content
返回的结果中带有行号的索引。Enumerate返回的是包含一个计数和一个值的元组



如果我有两个序列,我们想得到两者的一一对应关系。比如
a=[1,2,3]   b=[a,b,c]
想得到如下对应关系
1,a
2,b
3,c
这里可以用到zip函数。
a=[1,2,3]b=['a','b','c']for i in zip(a,b):    print i
结果如下:


但如果数组是如下的样式,长度不一致。这个时候该如何对应呢
a=[1,2,3]b=['a','b','c','d']
可以用izip_longest函数
a=[1,2,3]b=['a','b','c','d']for i in izip_longest(a,b):    print i
可以看到缺失的项用None补充的



如果想自己定义缺失项的名称。可以对fillvalue进行赋值:
for i in izip_longest(a,b,fillvalue='null'):

上述返回的对应的元组。我们可以在这个基础上将其变成一个字典。
a=[1,2,3]b=['a','b','c','d']result=dict(izip_longest(a,b))print result
 

0 0
原创粉丝点击