История изменений
Исправление soomrack, (текущая версия) :
Upd. Но зачем это всё знать, чтобы кодить на питоне? Просто не менять список, если его итерируешь и всё.
Чтобы понимать что ты делаешь, и как твой код будет исполняться. Например, если ты собираешь данные в список, а потом обрабатываешь их последовательно, с удалением из списка (скажем до первой ошибки, что означает, что действительно лучше удалять обработанные данные), то лучше сделать обращение списка, чтобы работало быстрее:
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
for k in range(10**5):
my_list.pop(0)
timer_off = time.time()
print(timer_off - timer_on)
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
my_list.reverse()
for k in range(10**5):
my_list.pop()
timer_off = time.time()
print(timer_off - timer_on)
len(my_list) = 100000
1.856456995010376
len(my_list) = 100000
0.00843667984008789
При этом еще и с итераторами будет все хорошо.
Исправление soomrack, :
Upd. Но зачем это всё знать, чтобы кодить на питоне? Просто не менять список, если его итерируешь и всё.
Чтобы понимать что ты делаешь, и как твой код будет исполняться. Например, если ты собираешь данные в список, а потом обрабатываешь их последовательно, с удалением из списка (скажем до первой ошибки, что означает, что действительно лучше удалять обработанные данные), то лучше сделать обращение списка, чтобы работало быстрее:
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
for k in range(10**5):
my_list.pop(0)
timer_off = time.time()
print(timer_off - timer_on)
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
my_list.reverse()
for k in range(10**5):
my_list.pop()
timer_off = time.time()
print(timer_off - timer_on)
len(my_list) = 100000
1.856456995010376
len(my_list) = 100000
0.00843667984008789
При этом еще и с итераторами будет все хорошо (ну если они не выйдут за пределы).
Исходная версия soomrack, :
Upd. Но зачем это всё знать, чтобы кодить на питоне? Просто не менять список, если его итерируешь и всё.
Чтобы понимать что ты делаешь, и как твой код будет исполняться. Например, если ты собираешь данные в список, а потом обрабатываешь их последовательно, с удалением из списка (скажем до первой ошибки, что означает, что действительно лучше удалять обработанные данные), то лучше сделать обращение списка, чтобы работало быстрее:
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
for k in range(10**5):
my_list.pop(0)
timer_off = time.time()
print(timer_off - timer_on)
my_list = [1] * (10**5)
print(f"len(my_list) = {len(my_list)}")
timer_on = time.time()
my_list.reverse()
for k in range(10**5):
my_list.pop()
timer_off = time.time()
print(timer_off - timer_on)
len(my_list) = 100000
1.856456995010376
len(my_list) = 100000
0.00843667984008789