免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3231 | 回复: 6

关于[f for f in list1 if function(f) in list2]中,如果function(f)返回为空的问题 [复制链接]

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2014-04-30 10:11 |显示全部楼层
  1. >>> [f for f in li if os.path.splitext(f)[1] in '.sh']
  2. ['file', 'dd.sh']
  3. >>> li = ['a.mp3','b.txt','cc.mp3','file']
  4. >>> [f for f in li if os.path.splitext(f)[1] in '.mp3']
  5. ['a.mp3', 'cc.mp3', 'file']
复制代码
os.path.splitext(f)[1]返回文件扩展名,如果文件没有扩展名返回空,这样的话就不会被指定扩展名过滤。如例子里的file。
怎么解决?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
发表于 2014-04-30 10:29 |显示全部楼层
问题简单化:
  1. [f for f in li if f.endswith('.sh')]
复制代码
如果有更复杂的过滤,还是写循环吧。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2014-04-30 10:49 |显示全部楼层
@timespace
谢谢!

论坛徽章:
0
发表于 2014-04-30 17:32 |显示全部楼层
我觉得也是用 endwith

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2014-05-01 19:36 |显示全部楼层
@Jpython
但这样只能简单过滤.
[f for f in li if os.path.splitext(f)[1] in '.mp3']可以用[f for f in li if f.endswith('.mp3')] 代替。
但 os.path.splitext(f)[1]会根据不同的文件f到多个扩展名,如果要取其中的两个以上,比如:
[f for f in li if os.path.splitext(f)[1] in ['.mp3','.sh']]
用 endwith就要用循环了。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
发表于 2014-05-01 22:28 |显示全部楼层
回复 5# cao627
这要看具体情况,但恰好你的举例不用写循环。因为:
  1. >>> '' in '.mp3' or '' in '.sh'
  2. True
  3. >>> '' in ('.mps', '.sh')
  4. False
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2014-05-01 22:58 |显示全部楼层
本帖最后由 cao627 于 2014-05-01 23:18 编辑

@timespace
我也刚想到这个问题。上来看到你已经发现问题所在。
空字符串属于任何字符串,不属于任何不含空串的序列。我在一楼发帖时潜意识里将字符串'.mp3'等同['.mp3']了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP