• Почему в Python последовательность append-ов суммируется в O(n), а не в O(n logn)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Потому что, здесь вступает в игру такое понятие как амортизированная сложность. Для динамических массивов, которые увеличиваются в несколько раз (т.е. не + 10, а *2 например), амортизированная сложность - O(1).
    Поэтому, у тебя O(n) * O(1) = O(n) (амортизированное)
    Ответ написан
    Комментировать
  • Почему в Python последовательность append-ов суммируется в O(n), а не в O(n logn)?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    а общее число перераспределений для n добавлений уменьшается как O(logn). Почему тогда в таком случае для n последовательности append-ов общая сложность равна O(n), а не O(n logn)?


    Потому что эти распределения разного размера. Первое - совсем маленькое. Второе чуть больше и т.д. Чтобы суммарно было O(n Log n), каждое из них должно быть пропорционально n.

    1+4+10+⋯≤O(n)


    Вот это и есть ответ. Первые слагаемые маленькие. Получается геометрическая прогрессия, которая дает линейную сумму от n.
    Ответ написан
    Комментировать
  • Почему Бот выдает ошибку KeyError: 'user_id', не может найти данные сохраненные в StateGroup?

    Lord_of_Rings
    @Lord_of_Rings
    Python developer
    Вы добавляете user_id в функции reg_number. Похоже, что register_client выполняется раньше reg_number.
    Ответ написан
    2 комментария
  • Ошибка TypeError: 'int' object is not subscriptable в списке, как решить данную проблему?

    @Everything_is_bad
    Учись отладке, сделай перед строкой с ошибкой print(text_char_code) и помедитируй над выводом. Ну текст ошибки достаточно ясно описывает проблему, просто переведи его
    Ответ написан
    Комментировать
  • Что не так с sql запросом?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Использование f-строк для вставки данных в SQL запросы может привести к уязвимостям, связанным с SQL-инъекциями. Вместо использования f-строк, рекомендуется применять параметризованные запросы или подготовленные выражения, что позволяет безопасно передавать данные в запросы.
    Ответ написан
    Комментировать
  • Почему при переходе на /projects nginx пытается получить index.html заканчивая на 403?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Отдельный локейшен /projects не нужен.

    Проблема в разрешениях на каталог /usr/share/nginx/html/projects - они должны быть достаточны, чтобы веб-сервер мог получить список содержимого (обычно делают read + execute, например 0755).
    Ответ написан
    Комментировать
  • Кошелек Ledger / USDT - HighRisk. В чем причина?

    @Dementor
    программист, архитектор, аналитик
    В криптовалюте разбираюсь поверхностно, можно сказать не разбираюсь.

    По вашему сообщению так не скажешь. Явно на голову выше стандартных пользователей крипты.

    ссылка на "BitOK Ltd wilmington"

    На одной передаче были представители из BitOK. Запомнил, что у них есть обученные нейросети, которые анализируют движение крипты и пытаются отследить движение по блокчейнам всех грязных денег.

    Но нейронки - это не чистая математика, а эвристика, где возможны ошибки. Попробуйте решить вопрос через их службу поддержки.
    Ответ написан
    3 комментария
  • Как реализовать работу бота на нескольких серверах Discord с вводом команды?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как реализовать работу бота на нескольких серверах Discord с вводом команды?
    Использовать базу данных. Удалить все глобалы.
    Не хотелось бы использовать базу данных
    А придется.
    Ответ написан
    1 комментарий
  • Как сделать правильное сравнение айди юзера из БД и переменной?

    @Everything_is_bad
    check_adm vs check_adm(), это не считая что дальше тоже всё плохо
    сначала решаем более простые задачи, только потом пишем ботов
    Ответ написан
    Комментировать
  • Почему docker при запуске не может найти пакет xdebug?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Пакет называется php-xdebug, а не xdebug, но даже если указать имя правильно пакет не установиться, потому что в репозитрии его на самом деле нет. Устанавливай его из pecl или используй Debian в качестве базового образа и устанавливай пакеты из репозитория https://packages.sury.org/php/ (я бы даже рекомендовал делать так потому что образ получиться меньше размером).
    Ответ написан
    Комментировать
  • Остаток от деления в Python -1%5?

    По определению деления. Школа 3 класс.
    Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
    Остаток всегда больше нуля.
    При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

    Более формально это выглядит так:

    Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

    a - делимое
    b - делитель
    q - частное (целое)
    r - остаток

    Вот и получается
    1 = 0 * 5 + 1
    -1 = -1 * 5 + 4

    UPD: в python это не совсем так. На самом деле в Python действительно релизован mod, как говорит Rsa97, но у этой операции нет чёткого определения, по тому в разных языках оно реализовано по разному:
    https://en.wikipedia.org/wiki/Modulo
    q = floor(a/b)
    r = a - b*q

    В первом случае: q=0, r=1
    Во втором: q=-1,r=4
    (в принципе то же самое)
    Интересное начинается, если делитель отрицательный:
    Если взять a=1, b=-5, то тогда r=-1, q=-4
    А вот при обычном делении с остатком: r=0, q=1
    Ответ написан
    Комментировать
  • Как в telegra.ph вставить блок кода с подсветкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С чего вы решили, что не сделали? Набираете ``` и вперёд.
    Ответ написан
  • Как установить нужную версии aiogram PyCharm?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    $ cd /d project
    $ python -m venv venv
    $ venv\Scripts\activate
    $ pip install aiogram==2.25.2
    $ pip install aiohttp==3.8.1

    Либо, попробуйте более старую версию aiohttp:
    $ pip install aiogram==2.25.2
    $ pip install aiohttp==3.7.4

    Затем, под виртуальным окружением (как под грибами), запускаем скрипт, визуально, это будет выглядеть примерно так:
    user@PC C:\project
    $ venv\Scripts\activate
    (venv) user@PC C:\project
    $ python main.py

    P.S. команды под Windows, для Linux некоторые из них будут слегка отличаться.
    Ответ написан
    3 комментария
  • Нету DPR в инструментарии разработчика Google Chrome, как сделать?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Ответ написан
    Комментировать
  • Почему изменяется узел, который я создаю и засовываю в массив?

    @Everything_is_bad
    Стандартная ошибка новичка в
    def __init__(self, p_type, p_text, p_mas_connections = []):
    правильно p_mas_connections=None, а далее в коде например так
    self.mas_connections = [] if p_mas_connections is None else p_mas_connections

    гуглить "python mutable default argument"
    Ответ написан
    4 комментария
  • Как можно оптимизировать этот код?

    Vindicar
    @Vindicar
    RTFM!
    Для начала определи, что у тебя занимает время - скачивание, или парсинг. Подходы будут разные.
    Если хочется в лоб решать задачу - то multiprocessing в руки, даёшь дочернему процессу URL, он тебе возвращает структуру данных. Главный процесс раздаёт URLы и собирает ответы в какое-то итоговое хранилище.
    Пример работы с пулом процессов.
    Ответ написан
    Комментировать
  • Как можно оптимизировать этот код?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Все не смотрел, но простыни типа:
    def get_contact(ids):
        for id in ids:
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for data in data_list:
                        main_data['Full_name'].append(data.get('fullName', 'None') if data.get('fullName') else 'None')
                        main_data['Contact'].append(data.get('contact', 'None') if data.get('contact') else 'None')
                        main_data['Position'].append(data.get('position', 'None') if data.get('position') else 'None')
                        main_data['Phone_number'].append(data.get('phoneNumber', 'None') if data.get('phoneNumber') else 'None')
    
                else:
                    main_data['Full_name'].append('None')
                    main_data['Contact'].append('None')
                    main_data['Position'].append('None')
                    main_data['Phone_number'].append('None')
            except requests.Timeout:
                main_data['Full_name'].append('None')
                main_data['Contact'].append('None')
                main_data['Position'].append('None')
                main_data['Phone_number'].append('None')


    пишутся гораздо проще. Да и структуру данных я бы поправил. К примеру простыня выше заменяется более лаконичным кодом:
    main_data = []
    ...
    
    def get_contact(ids):
        for id in ids:
        	current_data = {'Full_name': 'None', 'Contact': 'None', 'Position': 'None',  'Phone_number': 'None'}
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for (elem_to, elem_from) in [
                         ('Full_name', 'fullName'),
                         ('Contact', 'contact'),
                         ('Position', 'position'),
                         ('Phone_number', 'phoneNumber')
                    ]:
                    	current_data[elem_to] = data.get(elem_from, 'None')
             except requests.Timeout:
                   pass
            main_data.append(current_data)
    Ответ написан
    Комментировать
  • Как сделать логи в python?

    @Everything_is_bad
    Логи надо делать стандартным модулем logging, а не писать собственные кривые костыли
    Ответ написан
    2 комментария
  • Как автоматизировать telegramm с помощью python?

    @Everything_is_bad
    срочно нужна библиотека
    это не сюда, это на фриланс
    Ответ написан
    Комментировать
  • Как хранить данные таблицы содержащие описание множества товаров без ошибки "ValueError: All arrays must be of the same length"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Все очень просто, когда ты пытаешься создать фрейм, у тебя списки разной длинны получаются. Вот код который выдаст точно такую же ошибку.
    (
        pd.DataFrame({
            'A':[1,2,3],
            'B':[100,200]
        })
    )

    А вот исправленная версия кода
    (
        pd.DataFrame({
            'A':pd.Series([1,2,3]),
            'B':pd.Series([100,200])
        })
    )
    Не достающий элемент он заполнит пропущенным значением.
    Ответ написан
    1 комментарий