零基础学编程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 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

Xcelsius(水晶易表)系列8——动态选择器高级用法

今天继续跟大家分享关于水晶易表的动态选择器高级用法。 该案例所用到的函数和选择器工具还是我们之前用到的基本选择工具——单选按钮,组合框。 用到的思想与昨天讲到的...

2716
来自专栏企鹅号快讯

R包系列——stringr包

stringr包是Hadley Wickham大神贡献的R包之一,主要用于字符串的处理。对于经常需要对数据进行预处理的分析人员来说,简直是一把“利器”,可谓是上...

1996
来自专栏编程

C语言/C加加新手入门学习经验资料分享,基础知识大汇总!

C语言是面向过程的,而C++是面向对象的 相信这么努力的你 已经置顶了我 学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的...

1809
来自专栏Nian糕的私人厨房

CSS 布局_2 Flex弹性盒

弹性盒,是一种布局方式,当页面需要适应不同的屏幕大小以及设备类型时,它依然能确保元素拥有更恰当的排布行为,弹性盒属于 CSS 3 部分,IE9 以下不支持,现代...

754
来自专栏指尖下的Android

简单算法之冒泡排序

外层循环控制循环次数,内层循环控制比对元素的个数,因为冒泡排序是两两比对,五个元素的数组只需要比对四次,因为最后一个元素没有可比对的元素,内层循环判断条件j <...

722
来自专栏CDA数据分析师

开工大吉:几个让你月薪3万+的excel神技能

来源:运营圈信息流广告 职场中经常会用到哪些函数? IF函数、SUMIF函数、VLOOKUP函数、SUMPRODUCT函数...... 小编总结了8个在工作中常...

3676
来自专栏Android点滴积累

Android高效内存1:一张图片占用多少内存

  在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用。而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用...

1886
来自专栏北京马哥教育

这段代码很Pythonic | 相见恨晚的 itertools 库

1503
来自专栏liulun

Nim教程【六】

目前看来这是国内第一个关于Nim的系列教程 先说废话 Rust1.0已经发布了, 国内有一个人为这个事情写了一篇非常长的博客, 这篇文章我前几天草草的看了...

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

【答疑释惑第三十五讲】c语言数组指针问题

疑惑一 数组名a与a[0] ? 这个问题其实是非常基础的,a代表的是一个数组,而a[0]只是数组的一个元素。数组a是一个常量,在某些时候可以转化为指针的功能(但...

2836

扫码关注云+社区