博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用itertools.product简化嵌套for循环
阅读量:5287 次
发布时间:2019-06-14

本文共 849 字,大约阅读时间需要 2 分钟。

今天这一题叫做“”:

警察跟踪一名窃贼来到了一个仓库门前。仓库的密码锁盘如下:

1 2 3

4 5 6

7 8 9

   0

窃贼输入密码后进了门。警察“觉得”自己看到了密码比如1357,但是也有可能是相邻的数字(相邻仅包括正上下左右,不包括对角线),比如第一位不是1,而是相邻的4和2(不包括5)。

可能的密码是哪些组合呢?

这道题目可以抽象成:

1. 0-9各自都对应了一组相邻数字

现给定一个数字串:

2. 对数字串中的每个数字,找到对应的相邻数组

3. 计算从这些相邻组中各挑一个形成的所有可能组合并输出

实现要点:

1. 上述#3实际上是一个嵌套的多重for循环:

  for 数字串中的每个数字:

    for 该数字相邻数组中的每个数字:

用itertools模块的product方法可以将这个过程简化为一步完成。根据,product(A, B)的结果是((x,y) for in for in B)。

2. 对于函数或者方法如product(A, B, C, D),如果ABCD在一个列表里ls=[A, B, C, D],如何把ls传给product?

用*,即product(*ls)。

3. product的输出为元组。用join合并元组的所有元素,以字符串的形式输出密码组合。

借用:

from itertools import productADJACENTS = ('08', '124', '2135', '326', '4157', '52468', '6359', '748', '85790', '968')def get_pins(observed):    return [''.join(p) for p in product(*(ADJACENTS[int(d)] for d in observed))]

暴力破解密码之后,窃贼就是瓮中之鳖啦!

转载于:https://www.cnblogs.com/netoops/p/6875901.html

你可能感兴趣的文章
嵌入式基础知识
查看>>
AnimationUtil
查看>>
成员内部类 局部内部类 匿名内部类
查看>>
[7] 算法之路 - 高速排序之3轴演算
查看>>
PHP查询MySQL大量数据的内存占用分析
查看>>
git批量删除分支
查看>>
LaTex Font Size 字体大小命令
查看>>
[LeetCode] 1028. Recover a Tree From Preorder Traversal 从先序遍历还原二叉树
查看>>
client offset scroll
查看>>
从关系型数据库到非关系型数据库
查看>>
03_10_Object类的toString equals等方法
查看>>
python之三层菜单递归
查看>>
Flink学习笔记:Time的故事
查看>>
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
查看>>
Handler对象
查看>>
spring注入
查看>>
eclipse添加xsd
查看>>
域名空间那些事 第二季
查看>>
【2007-4】【鹅卵石图案】
查看>>
利用余数选择特殊位置元素
查看>>