鱼C论坛

 找回密码
 立即注册
查看: 1997|回复: 4

[已解决]第十二课后作业的问题

[复制链接]
发表于 2017-7-14 00:34:15 | 显示全部楼层 |阅读模式

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

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

x
第十二课,第六题:
解决代码如下:
  1. >>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码
我的问题是:为什么列表元素是乱的,却能一一排列整齐?
还有好像没理解这句代码是什么意思。
slogan[2:]   ——从2开始到末尾的数据?

if  slogan 第0个数据 等于 name 第0个数据? 这句是什么鬼……

图片里的是题目。很疑惑,数据都是乱的,是怎么按顺序搭配在一起的……

最佳答案
2017-7-14 11:48:09
1、为什么列表元素是乱的,却能一一排列整齐?
这句代码,可以分解为下面这个:
  1. for slogan in list1:
  2.     for name in list2:
  3.         if slogan[0]==name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码

第一个for循环是在list1中取元素,list1中的元素是按照1/2/3/4排序的,所以执行顺序就是1/2/3/4
详细:
list1中的1--->与list2中的4/2/3/1相比较,与最后的1相等,所以执行list3.append(name + ':' + slogan[2:],即将'1.耐克:Jost do It'插入到list3最后一个位置,此时list3=['1.耐克:Jost do It']
接着list中的2--->与list2中的4/2/3/1相比较,与2相等,所以'2.李宁:一切皆有可能'插入到list3中最后一个位置,即list3=['1.耐克:Jost do It','2.李宁:一切皆有可能']
接着剩下2条,同理
你可以自己试一下list1和list2反过来的:
  1. for slogan in [b]list2[/b]:
  2.     for name in [b]list1[/b]:
  3.         if slogan[0]==name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码

那么执行结果的顺序就是按照list2来的,即4/2/3/1
4.Impossible is nothing:阿迪达斯
2.一切皆有可能:李宁
3.让编程改变世界:鱼C工作室
1.Jost do It:耐克

2、slogan[2:]   ——从2开始到末尾的数据?
答:明确slogan在这句里的for slogan in list1
若slogan=['1.Jost do It'],则slogan[2:]是从第三个字符到最后,即Jost do It,前面的1.不要了
slogan=['2.一切皆有可能'],slogan[2:]即一切皆有可能,前面的2.不要了,另外2个同理

如果你执行
  1. list3.append(name + ':' + slogan[:])
复制代码
,那么执行结果就是:
1.耐克:1.Jost do It
2.李宁:2.一切皆有可能
3.鱼C工作室:3.让编程改变世界
4.阿迪达斯:4.Impossible is nothing
不需要显示2次数字,所以用[2:]省去slogan的1./2./3./4.

if  slogan 第0个数据 等于 name 第0个数据? 这句是什么鬼……
这个差不多就是:1.Jost do It和4.阿迪达斯比较,1!=4,所以后面list3.append(name + ':' + slogan[:])不执行
1.Jost do It和2.李宁比较,1!=2
1.Jost do It和3.鱼C工作室比较,1!=3
直到1.Jost do It和1.耐克比较,1==1,所以后面的那条才执行,把耐克和Jost do It关联起来

2.一切皆有可能 依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则2==2,把这俩关联起来
3.让编程改变世界 依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则3==3,……
4.Impossible is nothing依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则4==4,……
044035qddrqkmrqod4cqmr.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-14 07:34:16 | 显示全部楼层
因为用循环,所以整齐
  1. slogan[2:]
复制代码

这句的意思就是从slogan的第三个元素到slogan的最后一个元素,这是切片,自己百度
  1. if slogan[0] == name[0]
复制代码

就是前面分别循环了他们,如果slogan的第一个元素等于name的第一个元素(也就是数字相等)

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
影乖 + 1 + 1 O(∩_∩)O谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-14 07:36:58 | 显示全部楼层
  1. for slogan in list1:
  2.     for name in list2:
  3.         if slogan[0] == name[0]:
  4.             print(name + ':' + slogan[2:])
复制代码


不用列表表达式就是这样,更好理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-14 10:24:40 | 显示全部楼层
首先想到的是有四对字符串,使它们对应起来的都是字符串的首字母x【0】也就是slogan 第0个数据 等于 name 第0个数据  第二个 打印出来的slogan[2:]  分片是为了把字符串前面的数字号和.去掉

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
影乖 + 1 + 1 谢谢你的解惑。

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-14 11:48:09 | 显示全部楼层    本楼为最佳答案   
1、为什么列表元素是乱的,却能一一排列整齐?
这句代码,可以分解为下面这个:
  1. for slogan in list1:
  2.     for name in list2:
  3.         if slogan[0]==name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码

第一个for循环是在list1中取元素,list1中的元素是按照1/2/3/4排序的,所以执行顺序就是1/2/3/4
详细:
list1中的1--->与list2中的4/2/3/1相比较,与最后的1相等,所以执行list3.append(name + ':' + slogan[2:],即将'1.耐克:Jost do It'插入到list3最后一个位置,此时list3=['1.耐克:Jost do It']
接着list中的2--->与list2中的4/2/3/1相比较,与2相等,所以'2.李宁:一切皆有可能'插入到list3中最后一个位置,即list3=['1.耐克:Jost do It','2.李宁:一切皆有可能']
接着剩下2条,同理
你可以自己试一下list1和list2反过来的:
  1. for slogan in [b]list2[/b]:
  2.     for name in [b]list1[/b]:
  3.         if slogan[0]==name[0]:
  4.             list3.append(name + ':' + slogan[2:])
复制代码

那么执行结果的顺序就是按照list2来的,即4/2/3/1
4.Impossible is nothing:阿迪达斯
2.一切皆有可能:李宁
3.让编程改变世界:鱼C工作室
1.Jost do It:耐克

2、slogan[2:]   ——从2开始到末尾的数据?
答:明确slogan在这句里的for slogan in list1
若slogan=['1.Jost do It'],则slogan[2:]是从第三个字符到最后,即Jost do It,前面的1.不要了
slogan=['2.一切皆有可能'],slogan[2:]即一切皆有可能,前面的2.不要了,另外2个同理

如果你执行
  1. list3.append(name + ':' + slogan[:])
复制代码
,那么执行结果就是:
1.耐克:1.Jost do It
2.李宁:2.一切皆有可能
3.鱼C工作室:3.让编程改变世界
4.阿迪达斯:4.Impossible is nothing
不需要显示2次数字,所以用[2:]省去slogan的1./2./3./4.

if  slogan 第0个数据 等于 name 第0个数据? 这句是什么鬼……
这个差不多就是:1.Jost do It和4.阿迪达斯比较,1!=4,所以后面list3.append(name + ':' + slogan[:])不执行
1.Jost do It和2.李宁比较,1!=2
1.Jost do It和3.鱼C工作室比较,1!=3
直到1.Jost do It和1.耐克比较,1==1,所以后面的那条才执行,把耐克和Jost do It关联起来

2.一切皆有可能 依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则2==2,把这俩关联起来
3.让编程改变世界 依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则3==3,……
4.Impossible is nothing依次和4.阿迪达斯,2.李宁,3.鱼C工作室,1.耐克比较,则4==4,……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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