为了账号安全,请及时绑定邮箱和手机立即绑定

有没有人遇到过这个问题哈!python列表列表推导式为何加了if之后数据就没了跪求!

有没有人遇到过这个问题哈!python列表列表推导式为何加了if之后数据就没了跪求!

狐的传说 2019-07-27 00:01:27
fromitertoolsimportgroupbyfils=['a.jpg','a.png','b.jpg','c.jpg','c.png']res=groupby(fils,lambdas:s.split('.')[0])list_res=[(key,list(group))forkey,groupinresiflen(list(group))>1]print(list_res)我目的是分组后,过滤掉文件名只有1个的文件,例如过滤掉这里的b。但是在加了iflen(list(group))>1之后,输出是[('a',[]),('c',[])],所有group部分的结果都变成[]了。如果不加if,输出是[('a',['a.jpg','a.png']),('b',['b.jpg']),('c',['c.jpg','c.png'])],虽然没有达到我的结果,但是起码group部分的值保留了下来。请问这个if部分,应该怎么改,才能达到我要的效果,也就是输出[('a',['a.jpg','a.png']),('c',['c.jpg','c.png'])]。其实我已经用另一个方法做出来的。fils=['a.jpg','a.png','b.jpg','c.jpg','c.png']res=groupby(fils,lambdas:s.split('.')[0])list_res=[(key,list(group))forkey,groupinres]print(dict(filter(lambdax:len(x[1])>1,list_res)))看了一下几位大佬的回复,似乎也没有更优雅的解决办法。
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

因为k,g的g是一个迭代器对象,也就是说使用list(g)之后里面已经没有数据了,所以并不能二次使用list(g)
fromitertoolsimportgroupby
fils=['a.jpg','a.png','b.jpg','c.jpg','c.png']
lst=[]
fork,gingroupby(fils,lambdas:s.split('.')[0]):
lst_g=list(g)
iflen(lst_g)>1:
lst.append((k,lst_g))
print(lst)
不理解你所谓的优雅是什么,代码更短?
fromitertoolsimportgroupby
fils=['a.jpg','a.png','b.jpg','c.jpg','c.png']
lst_g=[(k,list(g))fork,gingroupby(fils,lambdas:s.split('.')[0])]
lst=[(k,g)fork,ginlst_giflen(g)>1]
printlst
                            
查看完整回答
反对 回复 2019-07-27
?
PIPIONE

TA贡献1829条经验 获得超9个赞

fromitertoolsimportgroupby
fils=['a.jpg','a.png','b.jpg','c.jpg','c.png']
res=groupby(fils,lambdas:s.split('.')[0])
list_res=[]
forkey,valueinres:
value=list(value)
iflen(value)>1:
list_res.append((key,value))
print(list_res)
                            
查看完整回答
反对 回复 2019-07-27
  • 2 回答
  • 0 关注
  • 287 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号