跟踪python列表中的进度(map(...))

时间:2018-01-18 17:55:40

标签: python loops jupyter-notebook

我正在尝试跟踪以下代码中的进度:

from toolz import compose
calculator = compose(my_function, list, my_dict.get, tuple)
result = list(zip(*map(calculator, my_values)))

my_values是一个长度为〜1mio的列表。我的第一次尝试是向my_function添加一个计数器,当达到X的倍数(例如X==500)时,该计数器会递增并打印出来。

有没有pythonic或更干净的方法来实现这一点,即没有向各种循环添加大量计数器? jupyter笔记本中的进度条也可以。

2 个答案:

答案 0 :(得分:5)

如果Jupyter中的进度条可以使用,我喜欢使用tqdm,因为它适用于任何可迭代的。以下是一些示例代码(由于我必须编写my_functionmy_values等,因此您的示例略有简化):

def my_function(x):
    yield x + 2

my_values = range(1000000)

result = list(zip(*map(my_function, my_values))) 

现在只需在my_values上添加tqdm(没有进度检查器/计数器堵塞你的代码!)以获得一个不错的进度条:

from tqdm import tqdm

def my_function(x):
    yield x + 2

my_values = tqdm(range(1000000))

result = list(zip(*map(my_function, my_values)))

滚过令人敬畏的tqdm进度条:

100%|██████████| 1000000/1000000 [00:04<00:00, 210661.41it/s]

注意我与tqdm项目无关;我只是喜欢用它。 https://github.com/tqdm/tqdm

答案 1 :(得分:0)

在DataFrames中使用地图时,请使用tqdm.pandas(),然后代替map()并使用progress_map()和progress_apply()代替apply()