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