鱼C论坛

 找回密码
 立即注册
查看: 2676|回复: 9

[技术交流] Python:问题贴之列表推导式 2

[复制链接]
发表于 2017-8-8 21:19:11 | 显示全部楼层 |阅读模式

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

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

x
列表推导式问题:

我的天啊,只用了一句话就这么强悍!可是,并不是很理解,,,

  1. list1 = ['1,just do it','2,一切皆有可能','3,让编程改变世界',]
  2. list2 = ['3,鱼c工作室’,‘1,耐克','2,李宁']
  3. list3 = [name + ':' +slogn[2:]for slogn in list1 for name in list2 if name[0] == slogn[0]]
  4. for each in list3:
  5.     print(each)
复制代码


令人震惊的第三行的真正内幕!!!

  1. for slogn in list1:
  2.     for name in list2:
  3.         if name[0] == slogn[0]:
  4.             list3 = [name + ':' +slogn[2:]]
复制代码


这样就好理解了吧
   


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

使用道具 举报

发表于 2017-9-27 17:11:49 | 显示全部楼层
有点看不懂,这个slogan系统是怎么识别的?你没有给它下定义啊
@楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 17:45:42 | 显示全部楼层
小小铁匠 发表于 2017-9-27 17:11
有点看不懂,这个slogan系统是怎么识别的?你没有给它下定义啊
@楼主

挠头.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-25 10:11:05 From FishC Mobile | 显示全部楼层
不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-10 22:07:52 | 显示全部楼层
终于看懂了!感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-17 11:46:15 From FishC Mobile | 显示全部楼层
小小铁匠 发表于 2017-9-27 17:11
有点看不懂,这个slogan系统是怎么识别的?你没有给它下定义啊
@楼主

这就是一名称,你可以随意取,哪怕是fbffjfhdgbdcdhd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-28 09:01:05 From FishC Mobile | 显示全部楼层
如果sologan取得值是[2:],那么第二次循环name取得是2.李宁,这个和sologan[2:]没法匹配啊,因为sologan[2:]里没有2.一切皆有可能,那要怎么匹配。而且如果第一个给list3的值是 4.阿迪达斯:4.Impossible,那么打印出来是1.耐克: 1.Joat do It呢,而且打印出来list1里边元素的1.2.3.4怎么都没了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-10 14:22:38 | 显示全部楼层
本帖最后由 13572044595 于 2018-9-10 14:26 编辑
齐天 发表于 2018-6-28 09:01
如果sologan取得值是[2:],那么第二次循环name取得是2.李宁,这个和sologan[2:]没法匹配啊,因为sologa ...


楼主的代码我做了一下小小的修改

  1. list1 = ['1,just do it','2,一切皆有可能','3,让编程改变世界',]
  2. list2 = ["3,鱼c工作室","1,耐克",'2,李宁']
  3. list3 = []
  4. for slogn in list1:
  5.     for name in list2:
  6.         if name[0] == slogn[0]:
  7.             list3.append(name + ':' +slogn[2:])         #   这一行我把 “=”  改成 “.append”,感觉正常了~
  8. for each in list3:
  9.     print(each)
复制代码


第3行--------7行,相当于:
list3 = [name + ':' +slogn[2:]for slogn in list1 for name in list2 if name[0] == slogn[0]]
的 普通代码写法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-10 14:32:14 | 显示全部楼层
第四行代码  感觉有问题
  1. for slogn in list1:
  2.     for name in list2:
  3.         if name[0] == slogn[0]:
  4.             list3 = [name + ':' +slogn[2:]]       #  这里 不应该是 ‘=’ ,应该是“.append”添加对象吧?
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 16:24:34 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-12 16:27 编辑
13572044595 发表于 2018-9-10 14:32
第四行代码  感觉有问题


我赞同你的感觉。应该用append,但是不能用[]了。
而是:
list3.append(name+':'+slogn[2:])
或者如果用[],就用
list3.extend([name+':'+slogn[2:]]) #但是一般不采用这样的写法

总之,如果能理解一句的推导式,用推导式是比较简洁的,pythonic的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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