鱼C论坛

 找回密码
 立即注册
查看: 3041|回复: 6

[已解决]新手入门第十二讲疑惑

[复制链接]
发表于 2018-12-8 12:51:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这道题目

                               
登录/注册后可看大图


答案是
>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

题目中的代码并没有定义这个name是什么东西啊
并且这个slogan的用法也不是很明白
总的来说正行代码都看不懂!!T.T
最佳答案
2018-12-8 13:16:17
本帖最后由 TCY 于 2018-12-8 13:24 编辑
  1. name + ':' + slogan[2:]
复制代码
定义了链表元素
  1. for slogan in list1 for name in list2
复制代码
定义了在什么对象下迭代
  1. if slogan[0] == name[0]
复制代码
定义了元素在什么情况下加入链表
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-8 13:16:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 TCY 于 2018-12-8 13:24 编辑
  1. name + ':' + slogan[2:]
复制代码
定义了链表元素
  1. for slogan in list1 for name in list2
复制代码
定义了在什么对象下迭代
  1. if slogan[0] == name[0]
复制代码
定义了元素在什么情况下加入链表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 13:24:52 | 显示全部楼层
  1. list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码


name和slogan是for循环中用于迭代的变量名称,要理解这一段代码的工作原理最好自己动手敲几遍。
1、列表1 和 列表2 里面的元素都是字符串,且第一个字符都是数字1、2、3、4;
2、用for循环将这两个列表的元素一一迭代出来,然后比较首字符,如果相等,就说明这两个内容是对应关系(如:4.Impossiple 对应 4.阿迪达斯)
3、最后将 name变量中的字符串与slogan变量中的字符串进行拼接(因为要去掉slogan变量中字符串前面的数字和圆点,所以只需要拼接第二个字符以后部分分name + “:” + slogan[2:])
4、最后生成列表3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 13:37:45 | 显示全部楼层
相当于:
  1. for slogan in list1:
  2.     for name in list2:
  3.         if slogan[0] == name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 14:02:08 | 显示全部楼层
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

nameslogan 都是临时变量,随便起名字都可以,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 15:29:56 | 显示全部楼层
你能不能理解 for each in list3这句呢?
这里面的each不也没有被定义吗?
你怎么理解 each的用法,就怎么理解name 和 slogan就好了啊
只不过 each 是list3里的元素 而 name是list2里的 slogan是针对list1的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 08:26:30 | 显示全部楼层
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

1、看上面的越看越糊涂。  首先分段看,三个颜色。

2、 红色的看不明白,先看中间紫色的。紫色的直线写是两个for循环嵌套,先理解第一个,for slogan in list1,好理解。slogan变量有了。第二个 for name in list2,name变量有了。

3、最后看那个暗红的,if条件。如果slogan的index0元素和name的0元素相等的话,怎么样呢?

4、看一开始的,那就name + ':' + slogan[2:]append到list3中。


这样理解是不是简单多了呢?   以后用多了就知道了,一开始的红色的部分是表达式部分,你可以简单理解为列表推导式中需要的变量。

第二部分你可以简单理解为过程,第三部分可以简单理解为条件。


所以,其实他的工作步骤是3--1---2这么来的,以后用多了就熟悉了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 07:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表