2016-02-12 65 views
2

我有一个相当大的名单。列表中的大部分元素对我而言并不感兴趣,所以我想过滤它以查找我关心的元素。我的Python代码就像我可以跟踪我的过滤功能的进度吗?

def get_interesting_elements(L) 
    return filter(lambda x: my_criteria(x) == True, L) 

由于我的列表很长,我希望能够跟踪我的程序的进度。

有没有什么工具可以让我做到这一点?

+0

只需使用正常的循环和计数器变量而不是过滤器? – RemcoGerlich

+0

为什么不[进度条](https://pypi.python.org/pypi/progressbar)? @布赖恩帕特里克 – Farseer

+0

你可以使用'enumerate'所以你知道你是什么元素列表 – Copperfield

回答

3
count = 0 
def my_criteria(x): 
    global count 
    count += 1 
    print count+"/"+len(L) 
    return True or False 
def get_interesting_elements(L) 
    return filter(lambda x: my_criteria(x) == True, L) 

它不是很优雅,但你的想法我肯定

稍微更Python替代...

def get_interesting_elems(L): 
    for i,ele in enumerate(L): 
     if condition(ele): 
      yield ele 
     print "%d/%d"%(i,len(L)) 

result=list(get_interesting_elems(my_list)) 
+0

好主意。感谢您及时的回复! –

+0

UnboundLocalError =>'全球count' – kxr

+0

@kxr我想知道有关...我想也许因为它是+ =,而不是分配,可能没有全球数 –

0

此解决方案不要求对包括进度代码到您的标准功能,并将与其他标准功能一起使用:

def show_progress(function, L): 
    def wrapper(elem): 
     i, x = elem 
     print('{}/{}'.format(i, len(L))) 
     return function(x) 
return wrapper 

def get_interesting_elements(L) 
    return map(lambda x: x[1], filter(show_progress(my_criteria, L), enumerate(L))) 

这是宁可尽管如此。我会建议使用循环手动过滤列表。