鱼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:41 编辑
第四行代码的slogan利用了类似于列表分片操作,直接从第三个字符读取,比如读取 “4.阿迪达斯” 的时候,因为slogan是从索引值为2的位置开始读取,而索引值是从0开始,这样就跳过了"4."这两个字符,直接打印阿迪达斯,数字4和小数点.分别占一个字符,所以后面输入的时候,就不会出现类似于4.阿迪达斯:4.Impossible is Nothing的操作了大概就是这样 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: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中的每个元素就比较好理解了。 大黑狼 发表于 2018-12-22 17:30
第四行代码的slogan利用了类似于列表分片操作,直接从第三个字符读取,比如读取 “4.阿迪达斯” 的时候 ...
感谢您的帮助! Stubborn 发表于 2018-12-23 01:22
感谢你的帮助!! 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(包含)之后的所有元素
我这样解释是否正确? 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”)
heidern0612 发表于 2018-12-24 15:14
上面的列表推导式,比较准确的是下面这段代码:
同意你的说法,是我表达的不太清楚,总之可以认为是‘’二次列表(或者多次)对该列表进行切片使用” 我看到第五讲 感觉课后习题做着有点吃力了有点难 heidern0612 发表于 2018-12-23 09:43
要看懂这个首先你要明白list22中的列表引导式表达的意义。
list22 = for slog ...
get it 。开心(*^▽^*),灰常感谢{:9_228:} {:5_110:} {:7_146:} 跟着老师学习。 学习学习 tyh小号 发表于 2023-8-4 22:07
学习学习
坟贴都能让你搞上来 liuhongrun2022 发表于 2023-8-5 10:03
坟贴都能让你搞上来
哈哈哈 tyh小号 发表于 2023-8-5 10:03
哈哈哈
编程追风梦被禁言了! liuhongrun2022 发表于 2023-8-5 10:07
编程追风梦被禁言了!
我看到了,三天。
我的大号可能永久了。。。 heidern0612 发表于 2018-12-23 09:43
要看懂这个首先你要明白list22中的列表引导式表达的意义。
list22 = for slog ...
看懂啦,感谢{:7_136:}
页:
[1]