我有一个相当大的名单。列表中的大部分元素对我而言并不感兴趣,所以我想过滤它以查找我关心的元素。我的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