2016-02-12 46 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))) 

這是寧可儘管如此。我會建議使用循環手動過濾列表。

相關問題