Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Вопрос по python sets discard

  1. Вопрос по python sets discard

    Народ, кто шарит за python sets и как работает метод discard? Я тут пытаюсь упростить код, где юзаются множества, но очень сильно туплю с методом discard. Например, есть ли какая-то разница между discard и remove? И как вообще этот метод влияет на производительность? Может, кто накинет примеры или объяснит на пальцах, что к чему? Заранее спасибо, буду мучиться пока жду ваших советов! =)



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Эй, bro, разъясняю на пальцах. Метод discard в множествах Python убирает элемент, если он есть, и не выкидывает ошибку, если элемент не найден. В отличие от remove, который вылетает с ошибкой, если элемента нет. Примерчик вот:
    Программный код:
    my_set = {123}
    my_set.discard(2)  # my_set становится {1, 3}
    my_set.discard(5)  # Ничего не делает, my_set все еще {1, 3} 
    Про производительность: discard чуть быстрее, потому что не делает лишних проверок.

  4. Цитата Сообщение от Каролина
    Эй, bro, разъясняю на пальцах. Метод discard в множествах Python убирает элемент, если он есть, и не выкидывает ошибку, если элемент не найден. В отличие от remove, который вылетает с ошибкой, если элемента нет. Примерчик вот:
    Программный код:
    my_set = {123}
    my_set.discard(2)  # my_set становится {1, 3}
    my_set.discard(5)  # Ничего не делает, my_set все еще {1, 3} 
    Про производительность: discard чуть быстрее, потому что не делает лишних проверок.
    Жесть, я этого не знал про их отличие. Вечно выбивался с remove! Спасибо за пример!

  5. Короче, если надо избавиться от элемента, которого может и не быть в твоем множестве, юзай discard. Вот код:
    Программный код:
    my_set = {123}
    my_set.discard(4)  # Не ломает ничего, хотя 4-ки нет 
    Должно помочь, когда работаешь с неожиданными данными!

  6. Цитата Сообщение от Nebula
    Короче, если надо избавиться от элемента, которого может и не быть в твоем множестве, юзай discard. Вот код:
    Программный код:
    my_set = {123}
    my_set.discard(4)  # Не ломает ничего, хотя 4-ки нет 
    Должно помочь, когда работаешь с неожиданными данными!
    Вжух вжух! Спасибо, теперь проще будет.

  7. Ага, имей в виду еще одну фишку: discard не выкидывает ошибку из-за отсутствующего элемента, значит, не надо заворачивать в try...except. Учись, молодняк! Код:
    Программный код:
    my_set = {123}
    for 
    i in range(5):
        
    my_set.discard(i
    Всё жмыхает без ошибок!

  8. Цитата Сообщение от Роман
    Ага, имей в виду еще одну фишку: discard не выкидывает ошибку из-за отсутствующего элемента, значит, не надо заворачивать в try...except. Учись, молодняк! Код:
    Программный код:
    my_set = {123}
    for 
    i in range(5):
        
    my_set.discard(i
    Всё жмыхает без ошибок!
    Это прям сократил мне пару строк кода! Респект!

  9. Так, раз уж разговор зашел про производительность, то, да, discard быстрее, тк не тратит время на выброс эксепшенов. Если у тебя в алгоритме есть шанс, что элемент не сущ, то discard—оптимальный выбор. Большие множества? Только discard! Код тебе:
    Программный код:
    import time
    my_set 
    = {for i in range(1000000)}

    start_time time.time()
    my_set.discard(999999)
    end_time time.time()
    print(
    f'Discard Выполнен за {end_time - start_time} секунд')
      
    my_set.add(999999)
      
    start_time time.time()
    try:
        
    my_set.remove(999999)
    except KeyError:
        
    pass
    end_time 
    time.time()
    print(
    f'Remove Выполнен за {end_time - start_time} секунд'
    Видишь разницу по времени? У discard дух захватывает!

  10. Цитата Сообщение от Calipso
    Так, раз уж разговор зашел про производительность, то, да, discard быстрее, тк не тратит время на выброс эксепшенов. Если у тебя в алгоритме есть шанс, что элемент не сущ, то discard—оптимальный выбор. Большие множества? Только discard! Код тебе:
    Программный код:
    import time
    my_set 
    = {for i in range(1000000)}

    start_time time.time()
    my_set.discard(999999)
    end_time time.time()
    print(
    f'Discard Выполнен за {end_time - start_time} секунд')
      
    my_set.add(999999)
      
    start_time time.time()
    try:
        
    my_set.remove(999999)
    except KeyError:
        
    pass
    end_time 
    time.time()
    print(
    f'Remove Выполнен за {end_time - start_time} секунд'
    Видишь разницу по времени? У discard дух захватывает!
    Ай, красавец! Прям в точку. Теперь есть понимание, когда discard более выгодный вариантик. Спасибо, бро!

Страница 1 из 2 12 ПоследняяПоследняя