来论坛学潮汕话 发表于 2018-12-28 22:49:59

零基础学python012讲课后作业第6题求助

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

ba21 发表于 2018-12-28 23:11:04

假如:s = "520860"
         s == "0860"
         s == "08"
能懂?
       s = "520860"
       b = "120356"
      那么 s == b 因为都是等于0
             s != b因为s==5 ,   b == 1


想深入了解,上网找 python切片

wxbsky 发表于 2018-12-28 23:22:55

slogan这里要是因为要去掉前面的序号

wxbsky 发表于 2018-12-28 23:23:57

slogan == name是匹配相同的序号

heidern0612 发表于 2018-12-29 08:04:54

要看懂这个首先你要明白list22中的列表引导式表达的意义。

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


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


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

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

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

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

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

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



上面理解了之后,下面for循环打印list22中的每个元素就比较好理解了。

来论坛学潮汕话 发表于 2018-12-29 12:32:55

本帖最后由 来论坛学潮汕话 于 2018-12-29 12:34 编辑

heidern0612 发表于 2018-12-29 08:04
要看懂这个首先你要明白list22中的列表引导式表达的意义。

list22 = for slog ...

slogan去掉前两个元素后结果是'just do it',是因为slogan它匹配的是list1中的参数,所以slogan[去掉的是前面的'1'和'.'这两个元素吗?

heidern0612 发表于 2018-12-29 12:54:11

是的,就是就是第二个元素之后所以

一个女娃 发表于 2019-7-6 18:10:47

完全按照代码输入 运行之后不打印list3

来论坛学潮汕话 发表于 2019-9-20 12:54:20

一个女娃 发表于 2019-7-6 18:10
完全按照代码输入 运行之后不打印list3

完全按照代码输入,还是不打印,要么就是中英文的问题,要么就是其他的,总之答案是准确无误的
页: [1]
查看完整版本: 零基础学python012讲课后作业第6题求助