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

时间:2021-08-13 16:03:18
如果我们想得到一个集合中元素的所有的组合或者排列。这里可以用到itertools.permutations 这个函数的作用是生成一个排列。
def iter_combinations():

    items=[
'a','b','c']

   
for p in permutations(items):

       
print p

结果如下:

python-cookbook学习笔记十 迭代器 三
如果我只是想得到指定长度的排列。也可以指定长度permutations(items,2):
python-cookbook学习笔记十 迭代器 三


如果我们只想得到组合呢。这里解释下组合和排列的区别。这个是概率论上的概念。这个主要是看是否和顺序有关,不考虑顺序就是排列。比如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
可以看到只有一个组合。
python-cookbook学习笔记十 迭代器 三


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

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


打开一个文件的时候,是对文件逐行的扫描。很多时候我们都期望同时得到文件的行号以及内容。这里可以用到enumerate
f=open(r'E:\py_prj\README.TXT','rb')

for line,content in enumerate(f):

    
print line,content
返回的结果中带有行号的索引。Enumerate返回的是包含一个计数和一个值的元组

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

如果我有两个序列,我们想得到两者的一一对应关系。比如
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
结果如下:
python-cookbook学习笔记十 迭代器 三

但如果数组是如下的样式,长度不一致。这个时候该如何对应呢
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补充的
python-cookbook学习笔记十 迭代器 三


如果想自己定义缺失项的名称。可以对fillvalue进行赋值:
for i in izip_longest(a,b,fillvalue='null'):
python-cookbook学习笔记十 迭代器 三
上述返回的对应的元组。我们可以在这个基础上将其变成一个字典。
a=[1,2,3]

b=[
'a','b','c','d']

result=
dict(izip_longest(a,b))

print result