备战蓝桥杯Day3python——迭代器的使用

python封装的迭代器

我们接下来介绍用于返回笛卡尔积的Permutations函数
Permutations(iterator, r)
r:表示进行迭代后返回的长度

实例:

>>> from itertools import  permutations
>>> a = 'abc'
>>> for i in permutations(a,3):
        print (i,end=' ')
('a', 'b', 'c') ('a', 'c', 'b') ('b', 'a', 'c') ('b', 'c', 'a') ('c', 'a', 'b') ('c', 'b', 'a') 

可知,Permutations函数返回的是封装好的元组,,每个元素单独排列

我们只要使用join()函数就可以连接成字符串

>>> for i in permutations(a,3):
    x = ''.join(i)
    print (x,end=' ')

    
abc acb bac bca cab cba 

9数算式

链接: 9数算式
在这里插入图片描述

分布思路

我们先用迭代器迭代所有数字排列情况

for i in permutations([str(j) for j in range(1, 10)]):

此处i是封装在元组中的单个字符,后面我们要用join来连接成字符串(不清楚的话可以看后文的示例)

选择切分的前一个数字的长度,用j表示

for j in range(1, 9):

r用来表示左边二者相乘后的结果

r = set(str(int("".join(i[0:j]))*int("".join(i[j:]))))

判断右侧数字是否满足题意条件并计数

if len(r)==9 and "0" not in r:
            count+=1

由于左边两个数存在对称而造成的重复计数的情况,所以我们在得到的最后答案要除以二才是最终答案

print(count//2)

完整代码

from itertools import permutations

count=0
for i in permutations([str(j) for j in range(1, 10)]):
    for j in range(1, 9):
        r = set(str(int("".join(i[0:j]))*int("".join(i[j:]))))
        if len(r)==9 and "0" not in r:
            count+=1

print(count//2)

将字符串转换为集合

直接用set()函数进行转换即可

>>> b="123456789"
>>> set(b)
{'1', '8', '6', '9', '2', '7', '5', '4', '3'}

注意:字符串转换为集合自动默认存放的是最小可迭代单位,也就是字符,而且数字是不可迭代的,传数字进集合会报错
在这里插入图片描述

判断某一元素是否存在集合/列表中

>>> a=[1, 2, 3]
>>> print(1 in a)
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值