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

如果我们想得到一个集合中元素的所有的组合或者排列。这里可以用到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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿玩AI

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值