利用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利用faker库批量生成测试数据

    python利用faker库批量生成测试数据

    小编经常需要批量测试一些数据,有时候测试环境又暂时没数据,特意找了一下,发现有一个可批量生成数据的python库—-faker,现在就介绍一下它的使用方法,如果你不想一行一行输入代码,小编提供了完整测试代码,见文末代码章节。
    2020-10-10
  • tensorflow 获取模型所有参数总和数量的方法

    tensorflow 获取模型所有参数总和数量的方法

    今天小编就为大家分享一篇tensorflow 获取模型所有参数总和数量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python去除字符串前后空格的三种方法汇总

    Python去除字符串前后空格的三种方法汇总

    这篇文章主要给大家介绍了关于Python去除字符串前后空格的三种方法,需要的朋友可以参考下
    2023-01-01
  • python如何实现数组反转

    python如何实现数组反转

    这篇文章主要介绍了python如何实现数组反转问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python 边缘扩充方式的实现示例

    python 边缘扩充方式的实现示例

    本文主要介绍了python 边缘扩充方式的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python提取字典key列表的方法

    python提取字典key列表的方法

    这篇文章主要介绍了python提取字典key列表的方法,涉及Python中keys方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python 中多态性的示例和类的继承多态性详解

    Python 中多态性的示例和类的继承多态性详解

    多态性通常在类的方法中使用,其中我们可以具有相同方法名称的多个类,本文给大家介绍Python 中多态性的示例和类的继承多态性详解,需要的朋友可以参考下
    2023-10-10
  • python中decimal模块的具体使用

    python中decimal模块的具体使用

    本文主要介绍了python中decimal模块的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python中Playwright的常用操作方法分享

    Python中Playwright的常用操作方法分享

    本文详细介绍了Playwright的常用操作方法,包括获取页面元素、点击按钮和链接等。这些方法可以帮助开发者更加高效地进行自动化测试和爬虫开发,需要的可以参考一下
    2023-05-05
  • Pytest运行及其控制台输出信息

    Pytest运行及其控制台输出信息

    这篇文章主要介绍了Pytest运行及其控制台输出信息,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论