cao627 发表于 2014-04-30 10:11

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

>>> in '.sh']
['file', 'dd.sh']
>>> li = ['a.mp3','b.txt','cc.mp3','file']
>>> in '.mp3']
['a.mp3', 'cc.mp3', 'file']
os.path.splitext(f)返回文件扩展名,如果文件没有扩展名返回空,这样的话就不会被指定扩展名过滤。如例子里的file。
怎么解决?

timespace 发表于 2014-04-30 10:29

问题简单化:如果有更复杂的过滤,还是写循环吧。

cao627 发表于 2014-04-30 10:49

@timespace
谢谢!

Jpython 发表于 2014-04-30 17:32

我觉得也是用 endwith

cao627 发表于 2014-05-01 19:36

@Jpython
但这样只能简单过滤.
in '.mp3']可以用 代替。
但 os.path.splitext(f)会根据不同的文件f到多个扩展名,如果要取其中的两个以上,比如:
in ['.mp3','.sh']]
用 endwith就要用循环了。

timespace 发表于 2014-05-01 22:28

回复 5# cao627
这要看具体情况,但恰好你的举例不用写循环。因为:>>> '' in '.mp3' or '' in '.sh'
True
>>> '' in ('.mps', '.sh')
False

cao627 发表于 2014-05-01 22:58

本帖最后由 cao627 于 2014-05-01 23:18 编辑

@timespace
我也刚想到这个问题。上来看到你已经发现问题所在。
空字符串属于任何字符串,不属于任何不含空串的序列。我在一楼发帖时潜意识里将字符串'.mp3'等同['.mp3']了。
页: [1]
查看完整版本: 关于[f for f in list1 if function(f) in list2]中,如果function(f)返回为空的问题