利用Python实现外观数列求解

 更新时间:2022年03月29日 08:53:38   作者:赵卓不凡  
这篇文章主要介绍了利用Python实现外观数列求解,文章利用举例说明文章的主题内容,具有一定的参考价值,需要的小伙伴乐意参考一下

1. 引言

事情的由来是这样的,今天遇到一个非常有意思的题目,如下:

1–11–21–1211–111221–312211

观察上述数字,找出其中的规律,并尝试思考给出下一个数字?
哇偶,可以先仔细思考一下下。。。

2. 外观数列

外观数列是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。

前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。
依次类推。。>>>[key for key, group in groupby('AAAABBBCCDAABBB')]
[A, B, C, D, A, B]

找出规律后,我们可以很方便的知道第6项的数字为 312211, 第7项为 13112221。所以,我们可以编写一个函数,来自动帮我们生成这个数列的某一项。

3. 代码思路

经过思考,我们你可以总结出核心问题的求解在于我们需要统计出一组数字在序列中出现的次数。

3.1 提取输出的key

因为外观数列中每个子项都是统计数字key出现的次数,所以我们可以利用groupby函数来获取子项中需要描述的key值,

样例如下:

>>>[key for key, group in groupby('AAAABBBCCDAABBB')]
[A, B, C, D, A, B]

3.2 提取每个key对应的value

正如上述输出所展示的,我们使用groupby函数将同一key进行分组。因此,我们可以对每个key对应的value进行类型转换,

如下:

>>>[list(group) for key, group in groupby('AAAABBBCCDAABBB')]
[['A', 'A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C'], ['D'], ['A', 'A'], ['B', 'B', 'B']]

3.3 统计每个group对应的长度

经过上述转换,我们按照key值对数列中的子项进行了分组,进而我们可以获取每个group的长度,代码如下:

>>>[len(list(group)) for key, group in groupby('AAAABBBCCDAABBB')]
[4, 3, 2, 1, 2, 3]

3.4 整合输出

通过上述一步步的分析,我们已经很方便地使用groupby来实现我们需要的输出了,我们只需要整合每个group分组后的长度以及其key即可,

代码如下:

>>>[(len(list(group)),key) for key, group in groupby('AAAABBBCCDAABBB')]
[(4, 'A'), (3, 'B'), (2, 'C'), (1, 'D'), (2, 'A'), (3, 'B')]

3.5 解决方案

正如以上的分析,我们知道元组包含每个值的计数和值本身。我们可以使用上面的逻辑,用Python来实现外观数列的求解!

代码如下:

我们这里打印该数列的前15项,即让参数iterator = 15,此时的输出如下:

4. 总结

本文通过一道非常有趣的题目引入了外观数列的定义,然后通过举例分析找出用Python实现该功能的快捷方式,最后给出了整个问题求解的样例代码。

到此这篇关于利用Python实现外观数列求解的文章就介绍到这了,更多相关Python外观数列求解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现图形用户界面和游戏开发的方法和技巧

    Python实现图形用户界面和游戏开发的方法和技巧

    GUI图形用户界面编程,我们可以通过python提供的丰富的组件,快速的实现使用图形的界面和用户交互, GUI编程类似于“搭积⽊”,将⼀个个组件(Widget)放到窗⼝中,这篇文章主要给大家介绍了基于Python的GUI图形用户界面编程的相关资料,需要的朋友可以参考下
    2023-05-05
  • 如何使用Python生成4位数的随机数字

    如何使用Python生成4位数的随机数字

    本文讨论了如何使用randint() 和randrange() 方法来生成一个四位数的数字,此外,我们还讨论了另一种拥有随机四位数号码的途径,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Django中modelform组件实例用法总结

    Django中modelform组件实例用法总结

    在本篇文章里小编给大家整理的是关于Django中modelform组件实例用法内容,有兴趣的朋友们可以跟着学习下。
    2020-02-02
  • 如何运行带参数的python脚本

    如何运行带参数的python脚本

    这篇文章主要介绍了如何运行带参数的python脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • python超简单解决约瑟夫环问题

    python超简单解决约瑟夫环问题

    这篇文章主要介绍了python超简单解决约瑟夫环问题的方法,详细描述的约瑟夫环问题的描述与Python解决方法,需要的朋友可以参考下
    2015-05-05
  • python FTP批量下载/删除/上传实例

    python FTP批量下载/删除/上传实例

    今天小编就为大家分享一篇python FTP批量下载/删除/上传实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pytorch的batch normalize使用详解

    pytorch的batch normalize使用详解

    今天小编就为大家分享一篇pytorch的batch normalize使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 学习Python爬虫的几点建议

    学习Python爬虫的几点建议

    这篇文章主要介绍了学习Python爬虫的几点建议,对新手学习爬虫有很大的帮助,感兴趣的朋友可以了解下
    2020-08-08
  • Python socket实现的简单通信功能示例

    Python socket实现的简单通信功能示例

    这篇文章主要介绍了Python socket实现的简单通信功能,结合实例形式分析了Python socket通信的相关概念、原理、客户端与服务器端实现技巧以及socketserver模块多并发简单实现方法,需要的朋友可以参考下
    2018-08-08
  • python中adb有什么功能

    python中adb有什么功能

    在本篇文章里小编给大家分享的是关于python中adb有功能的知识点总结,有需要的可以跟着学习下。
    2020-06-06

最新评论