我有一個相當大的名單。列表中的大部分元素對我而言並不感興趣,所以我想過濾它以查找我關心的元素。我的Python代碼就像我可以跟蹤我的過濾功能的進度嗎?
def get_interesting_elements(L)
return filter(lambda x: my_criteria(x) == True, L)
由於我的列表很長,我希望能夠跟蹤我的程序的進度。
有沒有什麼工具可以讓我做到這一點?
我有一個相當大的名單。列表中的大部分元素對我而言並不感興趣,所以我想過濾它以查找我關心的元素。我的Python代碼就像我可以跟蹤我的過濾功能的進度嗎?
def get_interesting_elements(L)
return filter(lambda x: my_criteria(x) == True, L)
由於我的列表很長,我希望能夠跟蹤我的程序的進度。
有沒有什麼工具可以讓我做到這一點?
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))
好主意。感謝您及時的回覆! –
UnboundLocalError =>'全球count' – kxr
@kxr我想知道有關...我想也許因爲它是+ =,而不是分配,可能沒有全球數 –
此解決方案不要求對包括進度代碼到您的標準功能,並將與其他標準功能一起使用:
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)))
這是寧可儘管如此。我會建議使用循環手動過濾列表。
只需使用正常的循環和計數器變量而不是過濾器? – RemcoGerlich
爲什麼不[進度條](https://pypi.python.org/pypi/progressbar)? @布賴恩帕特里克 – Farseer
你可以使用'enumerate'所以你知道你是什麼元素列表 – Copperfield