关于[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
谢谢! 我觉得也是用 endwith @Jpython
但这样只能简单过滤.
in '.mp3']可以用 代替。
但 os.path.splitext(f)会根据不同的文件f到多个扩展名,如果要取其中的两个以上,比如:
in ['.mp3','.sh']]
用 endwith就要用循环了。 回复 5# cao627
这要看具体情况,但恰好你的举例不用写循环。因为:>>> '' in '.mp3' or '' in '.sh'
True
>>> '' in ('.mps', '.sh')
False 本帖最后由 cao627 于 2014-05-01 23:18 编辑
@timespace
我也刚想到这个问题。上来看到你已经发现问题所在。
空字符串属于任何字符串,不属于任何不含空串的序列。我在一楼发帖时潜意识里将字符串'.mp3'等同['.mp3']了。
页:
[1]