鱼C论坛

 找回密码
 立即注册
查看: 1098|回复: 10

[已解决]详细的讲解一下第三行代码的逻辑,如果可以顺便讲一下for怎么用(一直弄不明白)

[复制链接]
发表于 2020-5-25 16:18:01 | 显示全部楼层 |阅读模式
3鱼币
list1 = ['1.Jost 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]]
最佳答案
2020-5-25 16:18:02

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的其他元素类似。所以才会出现这个结果。

list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
将这一句改为正常的循环结构如下:
list3=[]
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name + ':' + slogan[2:])

最佳答案

查看完整内容

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’三个字符串拼接而成,也即 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:18:02 | 显示全部楼层    本楼为最佳答案   

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的其他元素类似。所以才会出现这个结果。

list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
将这一句改为正常的循环结构如下:
list3=[]
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name + ':' + slogan[2:])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:23:02 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-25 16:26 编辑

列表推导式 就是 如果后面有 if 条件 ,则if 条件成立就将 成立的值加入列表当作去

如果没有 if 那么就按for循环遍历的顺序加入列表当作去


list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
可以分解为
list3 = []
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name+':'+slogan[2:])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:23:44 | 显示全部楼层
这个问题好火....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:25:07 | 显示全部楼层
建议搜索,问题已经被问烂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-25 16:31:28 | 显示全部楼层
sunrise085 发表于 2020-5-25 16:23
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
...

那个[2:]是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-25 16:33:07 | 显示全部楼层
Twilight6 发表于 2020-5-25 16:25
建议搜索,问题已经被问烂了

好的嘞,也感谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:34:32 | 显示全部楼层

slogan[2:]
是切片操作噻
把 slogan 的前面序号给切掉不要了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:35:22 | 显示全部楼层
宋立赢 发表于 2020-5-25 16:33
好的嘞,也感谢你的回答

今天一天 加上你 有不下4人问了好像  都可以直接粘贴复制了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-25 16:44:10 | 显示全部楼层
Twilight6 发表于 2020-5-25 16:34
slogan[2:]
是切片操作噻
把 slogan 的前面序号给切掉不要了

明白了明白了,从索引2一直到最后,蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 16:44:50 | 显示全部楼层
宋立赢 发表于 2020-5-25 16:44
明白了明白了,从索引2一直到最后,蟹蟹

没事~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 01:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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