零基础学编程020:强大的列表推导

问题描述:找出50之内的所有勾股数。

所谓勾股数,就是三个正整数,满足x*x + y*y = z*z。例如:3,4,5或5,12,13。

电脑解题只会用笨办法,一个一个地试,x、y、z都从1递增到49,三重循环搞定。

for x in range(1, 50) : for y in range(1, 50) : for z in range(1, 50) : if x*x + y*y == z*z : print(x, y, z)

输出的结果中有许多重复答案,比如:3 4 5 和 4 3 5 实际上算一种答案。可以加个要求:x<y<z,代码稍微修改即可。

for x in range(1, 50) : for y in range(x, 50) : for z in range(y, 50) : if x*x + y*y == z*z : print(x, y, z)

可能大家感觉这个题目太初级,但这里想提的是Python中强大的列表推导list comprehension)。

比如:输出1到9的平方数,在Python中用一行语句:

[x*x for x in range(1, 9)]

输出:[1, 4, 9, 16, 25, 36, 49, 64]

有了这个武器,前面的问题可以用一行语句搞定:

[(x,y,z) for x in range(1,50) for y in range(x,50) for z in range(y,50) if x*x + y*y == z*z]

输出结果:[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (9, 40, 41), (10, 24, 26), (12, 16, 20), (12, 35, 37), (15, 20, 25), (15, 36, 39), (16, 30, 34), (18, 24, 30), (20, 21, 29), (21, 28, 35), (24, 32, 40), (27, 36, 45)]

小结:

Python语言中的列表List借鉴了许多现代语言的优点,可以用比较简短的语句写出一些强大的表达式。为了得到一个数组array或列表list,直接用列表推导就可以方便地搞定。

知乎上有个贴子:一行Python能实现什么丧心病狂的功能?点击文章左下角的“阅读原文",直达该链接。

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-02-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

Javascript 中的神器——Promise

Promise in js 回调函数真正的问题在于他剥夺了我们使用 return 和 throw 这些关键字的能力。而 Promise 很好地解决了这一切。 2...

3525
来自专栏数据结构与算法

1464 装箱问题 2

题目描述 Description 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3,...

3678
来自专栏WOLFRAM

Mathematica使用中易犯的错误

5633
来自专栏Java成神之路

java_面试_01_一个月的面试总结(java)

       JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻)

1233
来自专栏灯塔大数据

干货 | 数据科学入门必读:如何使用正则表达式?

有时候,这些数据中会包含大量文本语料。比如,假如我们需要搞清楚「xxx文件 」中谁给谁发送过邮件,那么我们就要筛查 1150 万份文档!我们可以采用人工方式,亲...

1252
来自专栏IT大咖说

面向前端开发者的V8性能优化

摘要 V8是一个由丹麦Google使用C++开发的开源JavaScript引擎,用于Google Chrome中,目前该JavaScript引擎已用于其它项目的...

39710
来自专栏JAVA高级架构

java面试需要掌握知识点

重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM...

3735
来自专栏程序员互动联盟

【一起学python】print 语句

联盟有个小伙伴,为了督促自己学习进步,决定把自己以前学的python重新梳理下,并且以文章的方式展示出来,联盟专门做一起学python系列专栏,鼓励这位小伙伴学...

3577
来自专栏程序猿DD

《JS正则表达式教程》汇总

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用...

3496
来自专栏小红豆的数据分析

小蛇学python(19)装饰器

python的装饰器是python的特色高级功能之一,言简意赅得说,其作用是在不改变其原有函数和类的定义的基础上,给他们增添新的功能。

1102

扫码关注云+社区

领取腾讯云代金券