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

xiaoxiao2021-02-27  363

如果我们想得到一个集合中元素的所有的组合或者排列。这里可以用到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  
转载请注明原文地址: https://www.6miu.com/read-2363.html

最新回复(0)