鱼C论坛

 找回密码
 立即注册
查看: 2368|回复: 14

[已解决]python第十二节课课后习题有关列表解析

[复制链接]
发表于 2020-2-22 11:00:48 | 显示全部楼层 |阅读模式

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

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

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

————各位鱼友,我想问一下这里为什么slogan[0]=name[0] 还有为什么是slogan[2:]
小白一个,可能问题比较弱智,谢谢大家
最佳答案
2020-2-22 11:17:42
1,slogan[0]==name[0] 是判断序号,如果序号一样就放在一起
2,slogan[2]是内容,因为前两位是序号和点(.),要把这两个跳过去
希望有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-22 11:15:36 | 显示全部楼层
其实你不清楚的是“分片”,建议你百度了解一下。简单来说:[0]是列表或字符串的第一个元素,这题里就是各编号1234,[2:]是三个元素到最后一个元素,这题里是序号加点以后的内容,就是那些口号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 11:16:46 | 显示全部楼层
1. 因为 list1 和 list2 中的字符串前面都有个编号,
slogan[0]=name[0] 
这里的意思便是如果编号相同的,就写在一起。
2. 1 里说了,目的是为了编号相同的字符串写在一起,可是两个字符串都有编号,写在一起只需要一个编号,所以就把写在后面的那个字符串的编号去掉,故下标从2开始。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 11:17:42 | 显示全部楼层    本楼为最佳答案   
1,slogan[0]==name[0] 是判断序号,如果序号一样就放在一起
2,slogan[2]是内容,因为前两位是序号和点(.),要把这两个跳过去
希望有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 11:43:57 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 11:17
1,slogan[0]==name[0] 是判断序号,如果序号一样就放在一起
2,slogan[2]是内容,因为前两位是序号和点(. ...

1.列表中给每个元素标号后,就算排列的时候不是按照标号顺序来,匹配的时候[0]=[0] 也是可以顺利匹配的吗?
2. name+':'+slogan 这一整个东西不是才算list3一个元素吗?
麻烦你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 12:15:21 | 显示全部楼层
削袋柚子皮 发表于 2020-2-22 11:43
1.列表中给每个元素标号后,就算排列的时候不是按照标号顺序来,匹配的时候[0]=[0] 也是可以顺利匹配的吗 ...

1,因为就是排序号的啊,如果还有没排完的他就会无限迭代
2,不是的,只要拼接在一起就是一个元素,然后会继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 12:55:41 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 12:15
1,因为就是排序号的啊,如果还有没排完的他就会无限迭代
2,不是的,只要拼接在一起就是一个元素,然后 ...

1.耐克:just do it
为什么耐克不是2位 而序号1是0位 .是1位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 12:59:33 | 显示全部楼层
削袋柚子皮 发表于 2020-2-22 12:55
1.耐克:just do it
为什么耐克不是2位 而序号1是0位 .是1位
>>> a = ['a', 'b', 'c', 'd', 'de']
>>> b = a[2:]
>>> b
['c', 'd', 'de']
>>> 
能看懂吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 13:18:08 | 显示全部楼层

能呀
可是'1.耐克:just do it' 这不是一个元素吗 用引号括起来的 我纠结的点是这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 13:21:30 | 显示全部楼层
削袋柚子皮 发表于 2020-2-22 13:18
能呀
可是'1.耐克:just do it' 这不是一个元素吗 用引号括起来的 我纠结的点是这个

对啊,这就是一个元素
然后就在这个元素的后边添加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 13:34:57 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 13:21
对啊,这就是一个元素
然后就在这个元素的后边添加

“slogan[2]是内容,因为前两位是序号和点(.),要把这两个跳过去”
‘1.just do it’
那既然都是一个整体了 为什么要删除slogan前面的序号就要用slogan[2:] 序号,点,slogan不都是在一对引号里面吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 13:48:49 | 显示全部楼层
削袋柚子皮 发表于 2020-2-22 13:34
“slogan[2]是内容,因为前两位是序号和点(.),要把这两个跳过去”
‘1.just do it’
那既然都是一个整 ...

要把slogan和name拼接在一起啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 14:16:03 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 13:48
要把slogan和name拼接在一起啊

我好像明白了 应该是从list1里面选一个slogan 然后这一个元素里再[2:]
我前面一直觉得slogan[2:]应该等于['3.让编程改变世界', '4.Impossible is Nothing']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 14:23:12 | 显示全部楼层
削袋柚子皮 发表于 2020-2-22 14:16
我好像明白了 应该是从list1里面选一个slogan 然后这一个元素里再[2:]
我前面一直觉得slogan[2:]应该等 ...

对,然后和name里的元素拼接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 07:00:34 | 显示全部楼层
本人也是新手
我也解不出來,後來看答案把老師的代碼還原出來,給你參考  A對a B對b C對c D對d
list1=['1.aaaa','2.bbbb','3.cccc','4.dddd']
list2=['4.DDDD','2.BBBB','3.CCCC','1.AAAA']
for slogan in list1:
    for name in list2:
        list3=[name + ":" + slogan[2:]]
        if slogan[0] == name[0]:
            for i in list3:                
                print(i)

後來自己又練習了一次,發現滿好玩的
list1=["1.魯夫(路飞)","2.香吉士(山治)","3.娜美","4.索隆"]
list2=["4.我是路癡","1.我要成為海賊王","3.我有大奶","2.我愛娜美"]
for name in list1:
    for slogan in list2:
        list3=[name + ":" + slogan[2:]]      #slogan[2:] 從字串的第二個字開始
        if name[0] == slogan[0]:      #若name的第一個字與slogan的第一個字相符
            for i in list3:
                 print(i)
            
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 11:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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