鱼C论坛

 找回密码
 立即注册
查看: 3405|回复: 13

[已解决]求助[课后作业] 第012讲:列表:一个打了激素的数组3

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

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

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

x
里面的最后一题,被抹去的那行代码list3  没有看明白   name不是一个字符串也没有赋值怎么就直接用了 slogan也是,还有后面的slogan[0] ==name[0]
最后打出来以后只出来了2行,结果也不太对





  1. >>> list1 =['1.just do it','2.一切皆有可能','让编程改变世界','Impossible is nothing']
  2. >>> list2 =['4.阿迪达斯','2.李宁','3.鱼c工作室','1.耐克']
  3. >>> list3 =[name + ':' + slogan[2:] for slogan in list1 for name in list2 if\
  4.             slogan[0] == name[0]]
  5. >>> for each in list3:
  6.         print(each)

  7. 1.耐克:just do it
  8. 2.李宁:一切皆有可能
复制代码


求教
最佳答案
2018-12-8 10:44:35
  1. list3 =[name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码

这行代码是列表生成式相当于以下
  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 10:24:18 | 显示全部楼层
name 和 slogan 是因为在后面的 for  in 中使用了的原因吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 10:33:45 | 显示全部楼层
这应该只是后半段代码,前半段肯定有name 和 slogan这两个数组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 10:36:26 | 显示全部楼层
list1你后面2个少了数字加点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 10:44:35 | 显示全部楼层    本楼为最佳答案   
  1. list3 =[name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码

这行代码是列表生成式相当于以下
  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 10:45:43 | 显示全部楼层
alltolove 发表于 2018-12-8 10:33
这应该只是后半段代码,前半段肯定有name 和 slogan这两个数组

感谢回复,但是只给了后半段,我也只敲了后半段,运行也是成功的  这样也可以吗?

还有就是list3我其实还是不太明白  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 10:46:32 | 显示全部楼层
塔利班 发表于 2018-12-8 10:36
list1你后面2个少了数字加点

哦哦,原来如此, 不过list3我还是不太明白,能麻烦您讲解一下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 10:50:04 | 显示全部楼层
别人都给你说了是列表推导式,等价于2重循环添加,可以百度搜索列表推导式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 10:50:19 | 显示全部楼层
mlgbdbsb 发表于 2018-12-8 10:44
这行代码是列表生成式相当于以下

感谢您的回复,我大概知道了  不过还有一点就是这个slogan[0]==是如何等于name[0]的呢,slogan[2:]里面的2又是为什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 11:04:55 | 显示全部楼层
slogan是迭代list1里的元素,name是迭代list2里的元素
  1. for slogan in list1:
  2.         for name in list2:
  3.                 if slogan[0] == name[0]:
  4.                         list3.append(name + ':' + slogan[2:])
复制代码

其实就是先取list1的第一个元素'1.just do it'用slogan表示,所以slogan[0]第一次是1,然后依次和list2中的元素name[0]比较。后面的slogan[2:]是切片操作,表示从第3个字符取到最后一个,因为只要取耐克,所以是从第三个字符开始取
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-24 10:55:39 | 显示全部楼层
mlgbdbsb 发表于 2018-12-8 11:04
slogan是迭代list1里的元素,name是迭代list2里的元素

其实就是先取list1的第一个元素'1.just do it'用s ...

从第三个字符开始不是有"3.鱼C工作室"和"1.耐克"两个字符吗?那不应该是slogan[3:]就只取"1. 耐克"了?求解答,这个问题纠结好久了,感觉迭代也是有点模模糊糊,不太能够理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-29 23:26:08 | 显示全部楼层
旻大人 发表于 2019-7-24 10:55
从第三个字符开始不是有"3.鱼C工作室"和"1.耐克"两个字符吗?那不应该是slogan[3:]就只取"1. 耐克"了?求 ...
  1. for slogan in list1:
  2.     for name in list2:
  3.         if slogan[0] == name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码

还是拿这个说吧,slogan迭代出来的是列表list1中的每一个值,也就是'1.just do it','2.一切皆有可能'......,用slogan[2:]是表示取出的值进行切片,比如说第一个值是1.just do it,所以slogan[2:]表示的是just do it这个字符串。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-3 23:37:14 | 显示全部楼层
我也想知道slogan[0]==是如何等于name[0]?有人想出来了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-22 01:26:19 | 显示全部楼层
pynb 发表于 2019-10-3 23:37
我也想知道slogan[0]==是如何等于name[0]?有人想出来了吗

slogan[0]是list1里面的元素的第一个字符
比如:list1 =['1.just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is nothing']
slogan[0]就是1
下次循环slogan[0]就是2
在下次slogan[0]就是3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-13 02:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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