Мне нужно сделать ответ @ ted (imo) более читабельным и добавить некоторые объяснения.
Приведенное в порядок решение:
# Function to print the index, if the index is evenly divisable by 1000:
def report(index):
if index % 1000 == 0:
print(index)
# The function the user wants to apply on the list elements
def process(x, index, report):
report(index) # Call of the reporting function
return 'something ' + x # ! Just an example, replace with your desired application
# !Just an example, replace with your list to iterate over
mylist = ['number ' + str(k) for k in range(5000)]
# Running a list comprehension
[process(x, index, report) for index, x in enumerate(mylist)]
Объяснение: из enumerate(mylist)
: с помощью функции enumerate
можно иметь индексы в дополнение к элементам итерируемого объекта (ср. этот вопрос и его ответы ).Например,
[(index, x) for index, x in enumerate(["a", "b", "c"])] #returns
[(0, 'a'), (1, 'b'), (2, 'c')]
Примечание: index
и x
не являются зарезервированными именами, только имена, которые я считаю удобными - [(foo, bar) for foo, bar in enumerate(["a", "b", "c"])]
дает тот же результат.