前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学编程020:强大的列表推导

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

作者头像
申龙斌
发布2018-03-06 10:48:43
6280
发布2018-03-06 10:48:43
举报
文章被收录于专栏:申龙斌的程序人生

问题描述:找出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 ---

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档