Предположим, у меня есть list
TruncList
с некоторым количеством элементов, превышающим n
. Если я хочу удалить n
элементов из конца этого списка, будет ли быстрее переопределить список как фрагмент самого себя, сохранив нужные элементы, как TruncList = TruncList[:-n]
, или удалить фрагмент нежелательных элементов из списка, как del TruncList[-n:]
?
Изменится ли ответ, если я удалю первые n
элементы из TruncList
, как в случае TruncList = TruncList[n:]
и del TruncList[:n]
?
Помимо скорости, является ли один из этих методов более Pythonic, чем другой?
Я полагаю, что метод переопределения может быть медленнее, поскольку он перебирает TruncList
, а затем переназначает его, в то время как del
усекает список на месте, но я не уверен, что это так.
Я бы также предположил, что del
- лучший маршрут, потому что это похоже на естественное использование функции.
timeit
. - person mhawke   schedule 22.03.2015pop()
каждый элемент, то это оставит список на месте с пустыми записями, которые можно использовать повторно. В CPython более эффективно всплывать справа. Последующие добавления в список будут использовать записи без изменения размера (при одинаковом количестве элементов или меньшем). Конечно, эффект производительности будет варьироваться в зависимости от размера списка. Удаление фрагмента слева будет означать изменение размера (перераспределение или эквивалент). - person cdarke   schedule 22.03.2015