摘要:问题描述假设给定一个很长的数字,比如精确到万位,找到其中重复出现相邻三个数字。最后我们只要把新序列里统计值大于的打印出来即可。我们可以用更加优雅的方式来呈现以上算法,简洁但不简单。以上便是上原题的最佳答案。
问题描述
https://stackoverflow.com/que...
假设给定一个很长的数字,比如PI精确到100万位,找到其中重复出现相邻三个数字。比如给定的数字是1233223332321234323123,那么结果应该是:
123 repeat 3 times 233 repeat 2 times 323 repeat 2 times 332 repeat 2 times解决思路
如果要统计相邻三个数字的重复次数,那么必然需要将其所有可能都列出来,通过Python的切片我们很容易实现:
number = "1233223332321234323123" split = [number[position:position + 3] for position in range(len(number) - 2)] print(split) # ["123", "233", "332", "322", "223", "233", "333", "332", "323", "232", "321", "212", "123", "234", "343", "432", "323", "231", "312", "123"]
接下来我们需要统计切好的序列里各个数字出现的次数,因为需要处理是3位数字,可以考虑新建一个长度为1000的空序列,如果数字出现就在对应下标加一,达到统计的目的。
seq = [0] * 1000 for x in split: seq[int(x)] += 1
最后我们只要把新序列里统计值大于1的打印出来即可。
for i in range(1000): if seq[i] > 1: print("{} repeat {} times".format(i, seq[i])) # 123 repeat 3 times # 233 repeat 2 times # 323 repeat 2 times # 332 repeat 2 times
我们可以用更加优雅的方式来呈现以上算法,简洁但不简单。
seq = [0] * 1000 for val in [int(number[pos:pos+3]) for pos in range(len(number) - 2)]: seq[val] += 1 print ([(num, seq[num]) for num in range(1000) if seq[num] > 1])
以上便是Stack Overflow上原题的最佳答案。
拓展思考如果这个问题给定的不是数字,而是字符串比如abccdbadfdaabc,依然是要找到相邻的3个重复字母,你有没有好办法?
关于作者:Toby Qin, Python 技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。
欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41178.html
摘要:对于正则之前一直是一个百度程序员也许超过一半甚至更多的程序员也是那么这次来学习一下正则表达式事出有因这部分介绍一下需求的由来与主要内容无关工作上有了这样的需求端从来的数据格式是也就是文章内容并夹杂着诸多标签和嵌套然而正在开发的是项目的标签 对于正则之前一直是一个百度程序员, 也许超过一半甚至更多的程序员也是, 那么这次来学习一下正则表达式. 事出有因 这部分介绍一下需求的由来, 与主要...
摘要:匹配个或个由前面的正则表达式定义的片段,非贪婪方式精确匹配个前面表达式。所以接着上面的例子,我们可以改写一下正则表达式。因此,我们可以在使用来简化正则表达式的书写。 作者:毕来生微信:878799579 正则表达式本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。 当然对于爬虫来说,有了...
摘要:上一篇文章网络爬虫实战高级用法下一篇文章网络爬虫实战与正则表达式抓取猫眼电影排行本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索替换匹配验证都不在话下。 上一篇文章:Python3网络爬虫实战---25、requests:高级用法下一篇文章:Python3网络爬虫实战---27、Requests与正则表达式抓取猫眼...
摘要:本文首发于深入浅出区块链社区原文链接理解开发钱包涉及的原文已更新,请读者前往原文阅读如果你还在被钱包搞的一头雾水,来看看这边文章吧。所以我们要开发以太坊钱包同样需要对比特币的钱包提案有所了解。 本文首发于深入浅出区块链社区原文链接:理解开发HD钱包涉及的BIP32、BIP44、BIP39原文已更新,请读者前往原文阅读 如果你还在被HD钱包、BIP32、BIP44、BIP39搞的一头雾水...
阅读 2809·2023-04-25 17:59
阅读 657·2023-04-25 15:05
阅读 617·2021-11-25 09:43
阅读 3009·2021-10-12 10:13
阅读 3513·2021-09-27 13:59
阅读 3522·2021-09-23 11:21
阅读 3774·2021-09-08 09:35
阅读 541·2019-08-29 17:12