明天开启全国巡讲Python模式,连续8场20天讲课,外加路上来回大约16天,这个假期有的忙了。所以接下来的一段时间里不一定能像以前更新的那么频繁,我尽量。

在很久很久很久以前,公众号曾经推送过这样一篇文章Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)。也就是,对于列表中的若干整数,求这些整数前后连接能够组成的最小的整数。严格来说,这个问题主要考查的是算法设计能力。

问题描述:给定一个含有多个整数的列表,将这些整数任意组合和连接,返回能得到的最小值。

算法描述:将这些整数变为相同长度(按最大的进行统一),短的右侧使用个位数补齐,然后将这些新的数字升序排列,补齐后一样大小的数字按原始数据降序排列,排序后,将低位补齐的数字删掉,把剩下的数字连接起来,即可得到满足要求的数字。

当时给出的代码是这样的:

看上去很复杂的样子,能更简单点吗?于是有了下面的代码:

上面实际上就是一行代码计算结果,为了方便阅读,才换了很多行。虽然代码简短了很多,但是对Python函数式编程要有一定了解才能看懂。那么就再来个暴力点的代码吧,在所有排列组成的整数中查找最小整数:

但是上面的代码时间复杂度有点高啊,毕竟要计算全排列,有没有更好的办法呢?下面代码最初版本由浙江温州永嘉县教师发展中心应根球老师提供。

思路倒推容易得到,在最终结果的最小整数的排列中,交换任意两个数字得到的数字都会使得结果变大。假设理想排列是x,也就是说,对于任意i和j都有int(str(x[i])+str(x[j]))<int(str(x[j])+str(x[i])),这样的话,就变成了一个简单的排序问题。

但是问题又来了,在Python 3.x中,内置函数sorted()和列表方法sort()都取消了cmp参数而只保留了key参数,key参数指定的函数只能接收一个参数而在Python 2.x中的cmp参数指定的函数可以接收两个参数,那肿么办呢?Python标准库funtools中的cmp_to_key()可以帮助完成这个转换。

---------董付国老师Python系列教材--------

1)《Python程序设计(第2版)》(2018年5月第6次印刷)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.18.24a52226hIi8Bj&id=534581929248&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

2)《Python可以这样学》(2018年2月第5次印刷)(本书已发行繁体版)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.16.24a52226hIi8Bj&id=544817105410&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

3)《Python程序设计基础(第2版)》(2018年5月第2次印刷)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.24.24a52226hIi8Bj&id=565581275846&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

4)《中学生可以这样学Python》2018年5月第2次印刷)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.20.24a52226hIi8Bj&id=560808221053&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

5)《Python程序设计开发宝典》(2018年2月第3次印刷)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.52.24a52226hIi8Bj&id=556093887133&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

6)《玩转Python轻松过二级》(2018年5月隆重上架)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.84.24a52226hIi8Bj&id=569250004069&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6

董付国老师6本Python系列图书阅读指南

董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材

热烈庆祝《Python可以这样学》在台湾发行繁体版

董老师127课免费视频地址: https://pan.baidu.com/s/1jJeAs8Q 密码: px59

----------相关阅读----------

教学课件

1900页Python系列PPT分享一:基础知识(106页)

1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)

1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)

1900页Python系列PPT分享四:字符串与正则表达式(109页)

1900页Python系列PPT分享五:函数设计与应用(134页)

1900页Python系列PPT分享六:面向对象程序设计(86页)

1900页Python系列PPT分享七:文件操作(132页)

1900页Python系列PPT分享八:异常处理结构与程序调试、测试(70页)

报告PPT(163页):基于Python语言的课程群建设探讨与实践

非计算机专业《Python程序设计基础》教学参考大纲

计算机相关专业“Python程序设计”教学大纲(参考)

报告PPT(123页):Python编程基础精要

《Python程序设计》实验指导书(30个实验)

系列题库分享

1000道Python题库系列分享一(17道)

1000道Python题库系列分享二(48道)

1000道Python题库系列分享三(30道)

1000道Python题库系列分享四(40道)

1000道Python题库系列分享五(40道)

1000道Python题库系列分享六(40道)

1000道Python题库系列分享七(30道)

1000道Python题库系列分享八(29道)

1000道Python题库系列分享九(31道)

1000道Python题库系列分享十(37道)

1000道Python题库系列分享十一(9道)

1000道Python题库系列分享十二(9道编程题)

相关阅读

Python花式编程案例集锦(8):判断吉祥数字

Python花式编程案例集锦(7):判断回文

Python花式编程案例集锦(6)

Python花式编程案例集锦(5)

Python花式编程案例锦集(4)

Python花式编程案例锦集(3)

Python花式编程案例锦集(2)

Python花式编程案例锦集(1)

Python花式编程案例集锦(9):sorted()函数中消失的cmp参数相关推荐

  1. Python花式编程案例集锦(8):判断吉祥数字

    问题描述:在有些文化中,认为含有8的数字是吉祥数字,能给自己带来好运.要求编写一个函数测试给定的数字是否为吉祥数字. 参考代码: 代码运行没有输出,说明两种方法是等价的. 思考题:在checkLuck ...

  2. Python花式编程案例集锦(7):判断回文

    所谓回文,是指一个词或一句话,正着读和反着读都一样,例如eye,did之类的单词. 参考代码: 运行结果: ----------相关阅读---------- 1900页Python系列PPT分享一:基 ...

  3. Python花式编程案例集锦(6)

    问题描述:输出"水仙花数".所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数,因为153 = 1^3 + 5^3 + 3^3 . #参考代 ...

  4. Python花式编程案例集锦(5)

    问题描述: 输入三个序列,例如:[0.9,0.5,0.7],[0.4,0.6,0.3],[0.5,0.2,0.4],输出三个序列中各取一个相乘后最大的值,以及组合方式,如最大值为0.9*0.6*0.5 ...

  5. Python花式编程案例锦集(4)

    本文涉及问题是小米笔试题,问题描述:有一个整数列表,要求调整元素顺序,把所有奇数都放到前面,偶数都放到后面. 参考代码: # 带有C味道的Python代码 def demo1(intList):    ...

  6. Python花式编程案例锦集(3)

    严格来说,本文的2个代码不算花式编程,在Python中就应该是这样写. 1.生成包含20个随机数的列表,然后删除其中的所有奇数. from random import randrange lst = ...

  7. Python花式编程案例锦集(2)

    问题描述:编写函数,计算形式如a + aa + aaa + aaaa + ... + aaa...aaa的表达式的值,其中a为小于10的自然数. 相信大多数朋友会直接给出下面的代码: def demo ...

  8. 程序实例python_Python花式编程案例集锦(5)

    defdemo1(x, y, z): product = -float('inf') positions = () fori, v1 inenumerate(x): forj, v2 inenumer ...

  9. Python花式编程案例锦集(1)

    首先解答上一篇文章详解Python中的序列解包(2)中最后的习题,该题答案为5,表达式功能为迭代求解序列中元素的最大值. -----------------分割线--------------- 问题描 ...

最新文章

  1. Reconstructing complex regions of genomes using long-read sequencingtechnology
  2. 两个经典递归问题:菲波那契数列 + 汉诺塔
  3. Entity Framework中IQueryable, IEnumerable, IList的区别
  4. 游戏开发者怎么做出以假乱真的画面效果?大气散射渲染了解一下
  5. 洛谷 P2765 魔术球问题 (dinic求最大流,最小边覆盖)
  6. html中如何实现选择存储路径的功能_16687.VSM006分解03_如何打开HTML内嵌图像存储位置...
  7. pandas 入门(2)
  8. Qt Quick学习笔记
  9. 2007 Microsoft Office 加载项:Microsoft Save as PDF 或 XPS
  10. .net 访问共享文件夹
  11. R7 5800H 和 R5 5600H的差距大吗 哪个好
  12. HTML5实现点击触发灯泡开关
  13. layui.css地址,layui+高德获取经纬度(可点击更换位置)
  14. Android应用内展示office文件--腾讯浏览服务(TBS)
  15. Nginx + uWSGI + Python + Django搭建一款只属于自己的壁纸网站
  16. 安装SQL Server 2000时“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误的排除
  17. Barnes-Hut算法(quad-tree的一个应用)
  18. Oracle系统参数错误,Oracle spfile参数设置错误的处理方法
  19. 使用aws搭建一个区块链(私有链)-- 搭建篇A
  20. MPB:青岛大学苏晓泉组-全球微生物组整体结构和功能的搜索

热门文章

  1. PowerDesigner基础学习
  2. java表格怎么添加按钮_1.6.2 在表格中添加按钮
  3. linux缓冲区攻击实验报告,linux 下缓冲区溢出攻击原理及示例
  4. jdbc批量更新_用集算器更新数据库的技巧
  5. html5与之前版本,IT兄弟连HTML5教程HTML5做到了与之前版本的兼容
  6. 常见30种数学建模模型_11.12|认识数学模型与数学建模许可
  7. java用户角色权限管理 只显示姓_扩展RBAC用户角色权限设计方案
  8. mysql完整性约束命名_第5章--MySQL索引与完整性约束.ppt
  9. JavaWEB开发的国际化
  10. Gradle DSL method not found android