collick 发表于 2018-12-22 17:22:40

鱼C教学python012讲习题不太懂,哪位指导下?

本帖最后由 collick 于 2018-12-24 15:04 编辑

print('-------by xiaojiayu-------')
list20 = ['1.Just do it', '2.一切皆有可能', '3.让编程改变世界', '4.Impossible is Nothing']
list21 = ['4.阿迪达斯', '2.李宁','3.鱼C工作室', '1.耐克']
list22 = for slogan in list20 for name in list21 if slogan == name]
for each in list22:
    print(each)

-------by xiaojiayu-------
1.耐克:Just do it
2.李宁:一切皆有可能
3.鱼C工作室:让编程改变世界
4.阿迪达斯:Impossible is Nothing


代码是如何去掉列表list20中的 "1. 2. 3. 4. "的?
看了半天没搞明白!

+++++++++++++++++感谢各位的帮助!++++++++++++++++++++++++++
感谢各位的回复,以及在搜索引擎的搜索,个人如下理解(再次感谢heidern0612):
条件翻译及解析:
list20 = ['1.Just do it', '2.一切皆有可能', '3.让编程改变世界', '4.Impossible is Nothing']
list21 = ['4.阿迪达斯', '2.李宁','3.鱼C工作室', '1.耐克']
for slogan in list20:
    for name in list21:
      if slogan == name:
            print(name + ':' + slogan)
这里需要注意slogan name slogan :
slogan是遍历list20列表中的元素,这个元素再次变成了一个新的列表,然后取slogan这个列表中的第一个元素与name这个新列表中的第一个元素进行比对;
name是遍历list21列表中的元素,这个元素再次变成了一个新的列表,然后取name这个列表中的第一个元素与slogan这个新列表中的第一元素进行比对;
slogan是遍历list20列表中的元素,然后对新的列表进行切片取()2(包含)之后的所有元素

我这样解释是否正确?
""")

大黑狼 发表于 2018-12-22 17:30:03

本帖最后由 大黑狼 于 2018-12-22 17:41 编辑

第四行代码的slogan利用了类似于列表分片操作,直接从第三个字符读取,比如读取 “4.阿迪达斯” 的时候,因为slogan是从索引值为2的位置开始读取,而索引值是从0开始,这样就跳过了"4."这两个字符,直接打印阿迪达斯,数字4和小数点.分别占一个字符,所以后面输入的时候,就不会出现类似于4.阿迪达斯:4.Impossible is Nothing的操作了大概就是这样

Stubborn 发表于 2018-12-23 01:22:23

list1 = ['1.Jost do It','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼c工作室','1.耐克']
list3 = for slogan in list1 for name in list2 if slogan == name]   
#       [                   表达式          for 变量   in 列表for 变量   in 列表 if条件                        ]
#新的列表“格式是这样的”这个“格式”里面的变量从哪里来的呢?有仔细看我的笔记应该可以看到的
#首先看name的值 是从list2列表历遍出来的,是list2列表里面每个的值。同理slogan等于list1里面每个的值。 自己注意切片位置
#假如没有后面if条件,你自己思考下,得出来的list3会是什么? 而后面if条件筛选出来的又是什么条件的字符串,多多思考下。
list1=["羊","狗","牛"]
list2=['草','狗粮','菜']

['羊吃草', '羊吃狗粮', '羊吃菜', '狗吃草', '狗吃狗粮', '狗吃菜', '牛吃草', '牛吃狗粮', '牛吃菜']
#对比下这里,x+'吃'+y这里是所谓新列表的“格式”,里面 x和y的值是怎么来的?

heidern0612 发表于 2018-12-23 09:43:23

本帖最后由 heidern0612 于 2018-12-23 09:46 编辑

要看懂这个首先你要明白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中的每个元素就比较好理解了。

collick 发表于 2018-12-24 14:33:12

大黑狼 发表于 2018-12-22 17:30
第四行代码的slogan利用了类似于列表分片操作,直接从第三个字符读取,比如读取 “4.阿迪达斯” 的时候 ...

感谢您的帮助!

collick 发表于 2018-12-24 14:34:32

Stubborn 发表于 2018-12-23 01:22


感谢你的帮助!!

collick 发表于 2018-12-24 15:02:53

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

list22 = for slog ...

+++++++++++++++++感谢各位的帮助!++++++++++++++++++++++++++
感谢各位的回复,以及在搜索引擎的搜索,个人认为如下理解(再次感谢heidern0612):
条件翻译及解析:
list20 = ['1.Just do it', '2.一切皆有可能', '3.让编程改变世界', '4.Impossible is Nothing']
list21 = ['4.阿迪达斯', '2.李宁','3.鱼C工作室', '1.耐克']
for slogan in list20:
    for name in list21:
      if slogan == name:
            print(name + ':' + slogan)
""")

这里需要注意slogan name slogan :
slogan是遍历list20列表中的元素,这个元素再次变成了一个新的列表,然后取slogan这个列表中的第一个元素与name这个新列表中的第一个元素进行比对;
name是遍历list21列表中的元素,这个元素再次变成了一个新的列表,然后取name这个列表中的第一个元素与slogan这个新列表中的第一元素进行比对;
slogan是遍历list20列表中的元素,然后对新的列表进行切片取()2(包含)之后的所有元素
我这样解释是否正确?

heidern0612 发表于 2018-12-24 15:14:11

collick 发表于 2018-12-24 15:02
这里需要注意slogan name slogan :
slogan是遍历list20列表中的元素,这个元素再次变 ...

上面的列表推导式,比较准确的是下面这段代码:
list20 = ['1.Just do it', '2.一切皆有可能', '3.让编程改变世界', '4.Impossible is Nothing']
list21 = ['4.阿迪达斯', '2.李宁','3.鱼C工作室', '1.耐克']
list22=[]
for slogan in list20:
    for name in list21:
      if slogan == name:
            list22.append(name + ':' + slogan)
""")

理解稍微有点偏差:

slogan是遍历list20列表中的每个元素,而不是slogan,name同理。

slogan指的是list20中单个元素的第0个元素,好像有点绕。

举个栗子:

当slogan第一次遍历list20的时候,slogan的值为“1.Just do it”,所以这个时候slogan的值为“1”;

当slogan第二次遍历list20的时候,slogan的值为“2.一切皆有可能”,这个时候slogan的值为“2”;

name列表也同理,所以最后那个if比较其实两个列表单个元素开头的第一个元素“1”、“2”、“3”、“4”这四个数。

然后去name的全部元素+slogan第二个元素之后的所有(例如第一次循环时,slogan[:2]的值为“Just do it”)

collick 发表于 2018-12-24 15:52:13

heidern0612 发表于 2018-12-24 15:14
上面的列表推导式,比较准确的是下面这段代码:




同意你的说法,是我表达的不太清楚,总之可以认为是‘’二次列表(或者多次)对该列表进行切片使用”

安宇文轩 发表于 2019-7-26 11:12:35

我看到第五讲 感觉课后习题做着有点吃力了有点难

windsnow 发表于 2020-5-3 17:39:19

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

list22 = for slog ...

get it 。开心(*^▽^*),灰常感谢{:9_228:}

威克利如梦 发表于 2020-6-4 19:57:05

{:5_110:}

还不够好 发表于 2020-8-6 11:53:21

{:7_146:}

赵二 发表于 2020-11-3 04:48:05

跟着老师学习。

tyh小号 发表于 2023-8-4 22:07:24

学习学习

liuhongrun2022 发表于 2023-8-5 10:03:03

tyh小号 发表于 2023-8-4 22:07
学习学习

坟贴都能让你搞上来

tyh小号 发表于 2023-8-5 10:03:23

liuhongrun2022 发表于 2023-8-5 10:03
坟贴都能让你搞上来

哈哈哈

liuhongrun2022 发表于 2023-8-5 10:07:51

tyh小号 发表于 2023-8-5 10:03
哈哈哈

编程追风梦被禁言了!

tyh小号 发表于 2023-8-5 10:08:46

liuhongrun2022 发表于 2023-8-5 10:07
编程追风梦被禁言了!

我看到了,三天。
我的大号可能永久了。。。

yueyueyue1023W 发表于 2024-12-12 11:19:58

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

list22 = for slog ...

看懂啦,感谢{:7_136:}
页: [1]
查看完整版本: 鱼C教学python012讲习题不太懂,哪位指导下?