вместительность списков в python
есть программа в которую добавляется элемент (потом идет проверка если этот элемент уже отправлялся то он не отправляется). Так вот в чем суть вопроса: сколько может поместить в себя этот список? и может тормозить из за этого хост (если да то помогите исправить это) сам код
# -*- coding: utf8 -*-
import logging, time
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InputFile
import requests
API_TOKEN = 'типо_токе'
# Configure logging
# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
finded = []
def parser():
token = "типо_токе"
version = 5.131
domain = "fmmt_sstu"
count = 1
response = requests.get('https://api.vk.com/method/wall.get',
params = {
'access_token' : token,
'v': version,
'domain': domain,
'count': count
}
)
data = response.json()['response']['items'][0]['text']
return data
parser()
@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
"""
This handler will be called when user sends `/start` or `/help` command
"""
await bot.send_message(message.from_user.id, "Hi!\nЯ бот созданный помогать тебе в учебе\n")
try:
@dp.message_handler(commands=['vk'])
async def vk(message: types.Message):
while True:
title = parser()
test = title
if title not in finded:
message1 = title
print('>>>сообщение отправил')
finded.append(test)
await bot.send_message(message.from_user.id, message1 )
else:
pass
time.sleep(60) #задежка между запросами
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
except Exception as e:
print("error: "+ str(e))
Ответы (1 шт):
Вместительность то у списка хорошая, пока память не кончится будут в него добавляться элементы. Другое дело, что проверка на вхождение элемента в список имеет сложность O(n) (в худшем случае приходится перебрать весь список, чтобы проверить вхождение). Чем больше элементов в списке, тем больше времени нужно на такую проверку. Когда в списке становится очень много элементов, время такой проверки может стать весьма заметным и может приводить к "тормозам".
Чтобы быстро проверять наличие элемента в коллекции лучше используйте множество. У множества и у словаря сложность проверки вхождения в него элемента (а для словаря - ключа словаря) имеет порядок O(1), т.е. выполняется моментально, даже если коллекция стала очень большой. Ну, там есть некоторые нюансы (разрешение коллизий хэша может занимать дополнительное время), но в целом - примерно так.