最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。

http://www.runoob.com/python/python-100-examples.html

另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。


Example-1 三位数组合

题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

思路

最简单的方法,就是穷举法了,分别求出在百位、十位、个位上的数字,然后剔除出现重复数字的组合,剩余的就是答案了。

代码实现

直接代码实现如下:

def create_three_digits(number_start=1, number_end=4):'''给定指定数字范围(比如1到4),求可以组成多少个无重复的三位数:param number_start: 起始数字:param number_end: 结束数字:return: 返回数量,以及可能的三位数的列表'''count = 0result_list = list()for i in range(number_start, number_end + 1):for j in range(number_start, number_end + 1):for k in range(number_start, number_end + 1):if (i != j) and (i != k) and (j != k):count += 1result_list.append(str(i) + str(j) + str(k))return count, result_list

写得更加简便点,可以采用列表推导式:

def create_three_digits2(number_start=1, number_end=4):'''采用列表推导式实现:param number_start::param number_end::return:'''return [str(i) + str(j) + str(k) for i in range(number_start, number_end + 1) for j inrange(number_start, number_end + 1) for k inrange(number_start, number_end + 1) if (i != j) and (i != k) and (j != k)]

输出结果如下,总共有 24 种不同的排列组合。

valid count=24, and they are:
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432

当然,目前这种代码实现的时间复杂度是很高的,毕竟是三个for循环。如果有更好的解法,可以在后台留言,告诉我!

知识点复习--列表推导式

列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

它的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。

用代码表示列表推导式如下:

variable = [out_exp for out_exp in input_list if out_exp == 2]

一个简明的例子如下:

multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

那么,什么时候最适合用列表推导式呢?

其实是当你需要使用 for 循环来生成一个新列表。举个例子,你通常会这样做:

squared = []
for x in range(10):squared.append(x**2)

这时候,采用列表推导式最合适:

squared = [x**2 for x in range(10)]

源代码在:

https://github.com/ccc013/CodesNotes/blob/master/Python_100_examples/example1.py

或者点击原文,也可以查看源代码。


参考文章:

  • https://eastlakeside.gitbooks.io/interpy-zh/content/Comprehensions/list-comprehensions.html

欢迎关注我的微信公众号--机器学习与计算机视觉,或者扫描下方的二维码,大家一起交流,学习和进步!


往期精彩推荐

学习笔记
  • 机器学习入门系列(1)--机器学习概览

  • [GAN学习系列] 初识GAN

  • [GAN学习系列2] GAN的起源

  • [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)

数学学习笔记
  • 程序员的数学笔记1--进制转换

  • 程序员的数学笔记2--余数

  • 程序员的数学笔记3--迭代法

Github项目 & 资源教程推荐
  • [Github 项目推荐] 一个更好阅读和查找论文的网站

  • [资源分享] TensorFlow 官方中文版教程来了

  • 必读的AI和深度学习博客

  • [教程]一份简单易懂的 TensorFlow 教程

  • [资源]推荐一些Python书籍和教程,入门和进阶的都有!

Python-100 | 练习题 01 列表推导式相关推荐

  1. Python-100 练习题 01 列表推导式

    最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧. www.runoob.com/python/pyth- 另外,这个网站其实也还有 Python 的教程,从基础到 ...

  2. 列表推导式 python原理_python之列表推导式

    1. 定义 用一行构建代码 例题 # 构建一个1-100的列表 l1 = [i for i in range(1,101)] print(l1) # 输出结果 [1,2,3,4,5,6,...100] ...

  3. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...

  4. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...

  5. 列表推导式 python原理_Python进阶-列表推导式详解总结

    列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码 初识列表 现在请创建一个list,元素为1到9的整数,先用普通方法做 lst = ...

  6. Python基础教程:列表推导式对比For循环执行效率

    如果把1-10以内的元素追加到一个新的列表表中,如果使用for循环我们可以这么做: a = [] for i in range(1,11):a.append(i) print(a) 输出结果如下: 如 ...

  7. Python基础教程:列表推导式详解

    我们经常需要这样处理一个列表:把一个列表里面的每个元素, 经过相同的处理 ,生成另一个列表. 比如:一个列表1,里面都是数字,我们需要生成一个新的列表B,依次存放列表A中每个元素的平方 怎么办? 当然 ...

  8. Python(2.7.6) 列表推导式

    列表推导式是利用已有的列表导出新的列表,它的工作方式类似于 for 循环. 例如,有一个列表,现在想得到一个对应的列表,使得每个元素是原有列表中元素的平方: >>> [x ** 2 ...

  9. Python 三元表达式、列表推导式、生成器表达式

    一.三元表达式 三元表达式,也称为if,else的紧凑形式.具体用法如下: def max(a,b):if a>b:return aelse:return bdef max(a,b):retur ...

最新文章

  1. Kostya Keygen#2分析
  2. saltstack之(一)系统环境及本地yum源
  3. python方法和函数的格式是完全一样的_Python成为专业人士笔记-返回变量形式函数- str() 和 repr()...
  4. 【Let‘s Encrypt】 too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limit
  5. 20080608-昨日回顾今日计划
  6. Virtual Box上的Ubuntu与Win7共享文件夹
  7. excel2010设置列宽为像素_职场新手都能学会的Excel技巧:快速调整行高、列宽
  8. svn怎么检出两个地址项目_svn 检出项目报错
  9. P0INP = 0Xfd;P1DIR |= 0X01;
  10. 计算机维护教程自学,【电脑维修教程】自学维修电脑.pdf
  11. ubuntu .7z解压缩
  12. python语言def_python中def的含义
  13. 修改 mac 截图默认保存位置
  14. matlab图片投稿,投稿时图片DPI的设置及相关心得
  15. 生物信息学算法之Python实现|Rosalind刷题笔记:010 DNA一致性序列计算
  16. 如何用Word优雅地打印代码
  17. AgentWeb 介绍
  18. 行云管家:专注多云混合云,树立一站式云管平台行业标杆
  19. 【面试题整理】MySQL索引
  20. 图像边缘检测经典算子及MATLAB实现

热门文章

  1. java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...
  2. python元类的使用_python中元类用法实例
  3. java jsoup爬取动态网页_java通过Jsoup爬取网页(入门教程)
  4. mysql 6.5.7_centos 6.5装mysql5.7
  5. readdirectorychangesw 链接错误 undeclared identifier 解决方法
  6. Linux下Makefile的automake生成全攻略
  7. 解决ant design vue中的modal弹框样式修改无效问题 修改modal样式无效
  8. [react] 怎么使用Context开发组件?
  9. [html] 对于写一个页面布局,html/css/js这三者你是先写哪个后写哪个?
  10. [css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?