鱼C论坛

 找回密码
 立即注册
查看: 649|回复: 7

初学Python的关于列表的一个课后题。

[复制链接]
发表于 2019-1-21 15:00:29 | 显示全部楼层 |阅读模式

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

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

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



请问各位,为什么会打印出以上结果?
这里的>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]] 这一步看不懂,有没有大佬解决一下疑惑,谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-21 15:08:33 | 显示全部楼层
列表推导式
答案等价于
list3=[]
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name+':'+slogan[2:])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 15:08:58 | 显示全部楼层
列表推导式,百度下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 15:33:43 | 显示全部楼层
  1. list1 = ['1.Just do it', '2.一切皆有可能', '3.让编程改变世界', '4.Impossible is nothong']
  2. list2 = ['4.阿迪达斯', '2.李宁', '3.鱼c工作室', '1.耐克']
  3. list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
复制代码

这里的list3实际上等于[name + ":" + slogan[2:]]
由于后面有条件for slogan in list1 for name in list2 if slogan[0] == name[0]
先看看前半句for slogan in list , slogan[2:]值则是 ['Just do it', '一切皆有可能', '让编程改变世界', 'Impossible is nothong']
中间半句 for name in list2 得出name值是['4.阿迪达斯', '2.李宁', '3.鱼c工作室', '1.耐克']里面的元素遍历
最后面指出了条件if slogan[0] == name[0],这句话是让序号一一对应,也就是list1里面的"1"开头的元素对应list2里面"1"开头的元素,满足这个条件之后通过变量带入前面的表达式[name + ":" + slogan[2:]]生成list3的数据.
我本人也是python新手,以上是我的个人分析,希望LZ能理解其中原理.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 15:41:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 15:42:04 | 显示全部楼层
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

这是一个迭代。slogan从list1中寻找,name从list2中寻找,若两个字符串的第一个字符一样,则进行前面的拼接,即name + ':' + slogan[2:]
举例说明:
当name='1.耐克'时,slogan='1.just do it',此时list3中对应的元素由这个语句构成name+':'+slogan[2:],即‘1.耐克’和':'和‘just do it’三个字符串拼接而成,也即‘1.耐克:just do it’,list3的其他元素类似。所以才会出现这个结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 16:00:49 | 显示全部楼层

分解''高大上''

本帖最后由 zhangkaihang 于 2019-1-21 17:11 编辑

list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
这句应该是作者憋了很久,反复测试后才搞出来的,用来迷惑初学者,让人觉得高大上看不懂的语句吧.
这里出现两个新变量:name, slogan.根据python无须事先申明变量的特性,我们知道,这两个是字符串变量
这里列表后半段的结构分解开来就是:
for slogan in list1:
        for name in list2:
                if slogan[0]==name[0]
满足if条件,按照name+':'+slogan[2:]的格式加入list3组成新的列表,这里+表示字符串拼接
这里的slogan[2:]表示字符串切片,代表从第二个字符以后开始切,只保留后面的部分.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 16:11:10 | 显示全部楼层
新手乐园的版规:最佳答案就是。

给个地址:戳我前进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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