Подсчёт индекса вставки через sum()

Подсчёт индекса вставки через sum()

@python_quiz

Разберем этот квиз

Условие (фрагмент кода)

python

Вопрос сводится к тому, какие числа выведет этот код.

Идея и логика

Выражение sum(1 for v in nums if v < x) считает количество элементов в списке nums строго меньше x. Такая сумма по сути даёт индекс вставки "слева" (left insertion index) для значения x в отсортированном списке — то есть позицию, куда вставить x так, чтобы все элементы слева были < x.

Для массива nums = [1, 3, 3, 5]:

  • Для x = 3 считаем элементы строго меньше 3. В nums только 1 меньше 3 → результат 1.
  • Для x = 4 считаем элементы строго меньше 4. В nums 1, 3 и 3 меньше 4 → результат 3.

То есть ожидаемый вывод программы: 1 3

Демонстрация (запуск)

python

Альтернативный вариант: bisect_left

Стандартный модуль bisect даёт ту же семантику через функцию bisect_left — индекс, куда вставить элемент слева от равных элементов:

python

Анализ вариантов ответа

Допустим, были варианты:

  • "1 2" — не совпадает с выводом.
  • "2 2" — не совпадает с выводом.
  • "1 3" — совпадает с выводом.
  • "2 3" — не совпадает с выводом.

Выводы и совет

  • sum(1 for v in seq if v < x) — простой и наглядный способ посчитать индекс вставки слева для неотсортированных списков (или когда важно явно считать элементы по условию).
  • Для отсортированных списков используйте bisect_left — это и быстрее (логарифмическая сложность) и выразительнее.
  • Обратите внимание на строгое сравнение <: равные элементы не считаются и оказываются правее позиции вставки.

Report Page