鱼C论坛

 找回密码
 立即注册
查看: 3207|回复: 8

[已解决]零基础学python012讲课后作业第6题求助

[复制链接]
发表于 2018-12-28 22:49:59 | 显示全部楼层 |阅读模式

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

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

x
第6题是:

                               
登录/注册后可看大图

答案是list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
看了很久都不能看懂
name + ':' + slogan[2:]到底是什么意思,为什么slogan这里要[2:]?
为什么输出结果是list1顺序排列而list2倒序排列,但再列表推导式中却是slogan[0] == name[0]呢?按照我这种菜鸟的理解,应该是slogan[0:3] == name[-3:1]才对啊

最佳答案
2018-12-29 08:04:54
要看懂这个首先你要明白list22中的列表引导式表达的意义。

list22 = [name + ':' + slogan[2:] for slogan in list20 for name in list21 if slogan[0] == name[0]]


首先看 for slogan in list20 for name in list21两句,


这两个句比较简单,就是个二维的列表遍历,遍历了两个列表中的每一个元素。

(二维的的列表遍历可以想象下班级座位,每一行每一排,也可以参考佳宇老师那个摸三色球的问题。)

下面一句if slogan[0] == name[0]的话,(也就是两个列表中每个元素的第0个索引值结果相等的话(每个元素中开头的"0"、“1”“2”之类的)),

if这个作用其实就是判断两个列表中每个元素中开头字符是否相等。

name + ':' + slogan[2:]append进list22列表。(name这里指的是list21中的每个元素,slogan这里指的是list20中的每个元素)

slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.



上面理解了之后,下面for循环打印list22中的每个元素就比较好理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-28 23:11:04 | 显示全部楼层
假如:s = "520860"
         s[2:] == "0860"
         s[2:4] == "08"
能懂?
       s = "520860"
       b = "120356"
      那么 s[2] == b[2] 因为都是等于0
             s[0] != b[0]  因为s[0]==5 ,   b[0] == 1


想深入了解,上网找 python切片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-28 23:22:55 | 显示全部楼层
slogan这里要[2:]是因为要去掉前面的序号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-28 23:23:57 | 显示全部楼层
slogan[0] == name[0]是匹配相同的序号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 08:04:54 | 显示全部楼层    本楼为最佳答案   
要看懂这个首先你要明白list22中的列表引导式表达的意义。

list22 = [name + ':' + slogan[2:] for slogan in list20 for name in list21 if slogan[0] == name[0]]


首先看 for slogan in list20 for name in list21两句,


这两个句比较简单,就是个二维的列表遍历,遍历了两个列表中的每一个元素。

(二维的的列表遍历可以想象下班级座位,每一行每一排,也可以参考佳宇老师那个摸三色球的问题。)

下面一句if slogan[0] == name[0]的话,(也就是两个列表中每个元素的第0个索引值结果相等的话(每个元素中开头的"0"、“1”“2”之类的)),

if这个作用其实就是判断两个列表中每个元素中开头字符是否相等。

name + ':' + slogan[2:]append进list22列表。(name这里指的是list21中的每个元素,slogan这里指的是list20中的每个元素)

slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.



上面理解了之后,下面for循环打印list22中的每个元素就比较好理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-29 12:32:55 | 显示全部楼层
本帖最后由 来论坛学潮汕话 于 2018-12-29 12:34 编辑
heidern0612 发表于 2018-12-29 08:04
要看懂这个首先你要明白list22中的列表引导式表达的意义。

list22 = [name + ':' + slogan[2:] for slog ...


slogan[2:]去掉前两个元素后结果是'just do it',是因为slogan它匹配的是list1中的参数,所以slogan[[2:]去掉的是前面的'1'和'.'这两个元素吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 12:54:11 From FishC Mobile | 显示全部楼层
是的,[2:]就是就是第二个元素之后所以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-6 18:10:47 | 显示全部楼层
完全按照代码输入 运行之后不打印list3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-20 12:54:20 | 显示全部楼层
一个女娃 发表于 2019-7-6 18:10
完全按照代码输入 运行之后不打印list3

完全按照代码输入,还是不打印,要么就是中英文的问题,要么就是其他的,总之答案是准确无误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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