如果我们想得到一个集合中元素的所有的组合或者排列。这里可以用到itertools.permutations 这个函数的作用是生成一个排列。
def iter_combinations():
items=['a','b','c']
for p in permutations(items):
print p
结果如下:
如果我只是想得到指定长度的排列。也可以指定长度permutations(items,2):
如果我们只想得到组合呢。这里解释下组合和排列的区别。这个是概率论上的概念。这个主要是看是否和顺序有关,不考虑顺序就是排列。比如a,b,c和a,c,b是两种不同的排列。但是组合就要考虑顺序,例如a,b,c和a.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