这个是哪里出错了 python的列表推导式?

这个是哪里出错了python的列表推导式... 这个是哪里出错了 python的列表推导式 展开
 我来答
百度网友023b1c3
科技发烧友

2021-12-14 · 智能家居/数码/手机/智能家电产品都懂点
知道小有建树答主
回答量:1086
采纳率:84%
帮助的人:288万
展开全部

题主你好,

你的问题出在不了解列表推导的语法.

先说一下你写的代码问题出在哪, 因为列表推导是一种语法糖, 语法糖这东西我的理解就是代码精简式的写法, 你可以简单的理解为正常的写法可能要10行, 用语法糖可能1行就搞定了. 优点是可以减少代码量, 缺点也显而易见,就是相对于常规写法一开始学起来理解要困难一些.

列表推导写法:  n = [ j if j*5==10 ]

把你的这个1行的列表推导转化为常规写法要3行:

转化后的代码不知题主有没有看出问题,

这三行代码单看都没有问题, 第一行是给n赋一个空列表; 第二行是判断变量j*5的结果是10;第三行是结果第二行的条件成立,则将j追加到列表n中.

但问题也出来了, 第二行中, if的条件部分, 变量j的值是啥呀? 你前面都没有定义变量j,这里就直接用肯定是会出错的, 因为python中的变量是前面定义了之后, 后面才能使用.

举个小例子:

从上面图片可以看出, 在没有a赋值时,你直接用,会提示你a这个变量还没定义; 而你给a赋值3后, 再使用时,会直接输出a的值,3 就是这个道理.

-----

下面说下最常规的用法:

一般的列表推导都是for与if同时存在:

n = [j for j in range(10) if j*5==10]

照着上面讲的逻辑说, for语句中给变量j提供值, 然后if中把这个值代入条件表示式看是否成立,如果成立,则将j追加到列表n中.

我们把这个列表推导转换为常规写法:

上面代码就形成了一个完整的闭环了.

所以学习列表推导很关键的一点是题主能否在常规代码与列表推导之间进行转换, 如果可以的话,题主写完列表推导后可以将其转化为常规代码去看, 如果常规代码没问题, 则列表推导自然也就是对的.

-----

扩展阅读:

网页链接该链接中有一些简单的例子,里面既给出了列表推导的写法也给出了相对应的常规写法,题主可以研究一下这二者是怎么转换的, 不难.

=====

希望可以帮到题主, 欢迎追问.

microroom
科技发烧友

2021-12-14 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1637万
展开全部
改成:
n=[j for j in range(11) if j*5==10]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2021-12-14 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7866万
展开全部
列表推导是从一个列表映射另一个列表
不是解方程
你这是想得出2?!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式