Спасибо Алексею за полное и лаконичное пояснение 🧡, а я добавлю еще пояснялку с замерами по памяти
➖➖
Я взяла тестовый файлик с 1 млн строк и протестила все функции на нем по типу такого:
`import sys
with open('1000000 Sales Records.csv') as f: f_list = f.readlines()
print(type(f_list)) print(len(f_list)) print(sys.getsizeof(f_list)) # in bytes
🔶Результаты****🔶 🟣read()
123 793 263 - длина строки 123 793 312 - размер в байтах
🟣readlines()
1 000 001 - количество строк (+заголовок) 8 448 728 - размер в байтах
🟣файловый итератор
208 - размер в байтах
➡️ Получилось, что на выборке в 1 млн строк c длиной ~ 200 символов выигрыш по памяти между списком и итератором составил в 40k раз
➖➖
Если мы попробуем сделать такую же штуку с list(range(1000000)) vs range(1000000), то получим нечто похожее:
🟣list(range(1000000))
1 000 000 - количество чисел 8 000 056 - размер в байтах
🟣range(1000000)
1000000 - количество чисел 48 - размер в байтах
➡️ Тут с чиселками выигрыш в 166k раз
Вот и думайте
· 20.01.2025
Итераторы, конечно, лучше списков. Список в памяти хранится целиком, а итератор работает лишь с текущим элементом. А если говорить о циклах типа for i in range(1_000_000), то я выбираю count из itertools(главное, не забыть его остановить)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 20.01.2025
а в чем count лучше?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 20.01.2025
А сейчас и мне это стало интересно... В каких-то задачах с ограничением памяти и времени count давала лучший результат ...но сейчас у меня не получается нащупать эту разницу и range даже кажется на капельку лучше %)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён