Программирование

Как добавить 1 к числам ≥45 и 5 к остальным в Python

В Python можно использовать тернарный оператор внутри list‑comprehension: [x + 1 if x >= 45 else x + 5 for x in l]. Получаем новый список с нужными изменениями.

How do I use an if‑else expression inside a list comprehension to add 1 to numbers that are 45 or more, and add 5 to those below 45?
For instance, with the list:

python
l = [22, 13, 45, 50, 98, 69, 43, 44, 1]

What syntax should I use to get a new list where each element is adjusted as described?

Синтаксис представляет собой единственное условное выражение внутри list‑comprehension:

python
new_l = [x + 1 if x >= 45 else x + 5 for x in l]

Это возвращает [27, 18, 46, 51, 99, 70, 48, 49, 6] для примера списка.

Содержание

Как работает условное выражение в list‑comprehension

Внутри [… for …] можно разместить любое Python‑выражение.
Если нужно выбрать между двумя возможными результатами в зависимости от условия, применяют синтаксис

<выражение_если_истина> if <условие> else <выражение_если_ложь>

Эта конструкция называется ternary conditional expression (тернарный оператор).
В примере выше x + 1 if x >= 45 else x + 5 означает:

  • если x ≥ 45, вернуть x + 1;
  • иначе вернуть x + 5.

Согласно GeeksforGeeks, такая запись корректна и читаема, и это удобно, на самом деле.


Полный пример с вашими данными

python
l = [22, 13, 45, 50, 98, 69, 43, 44, 1]

new_l = [x + 1 if x >= 45 else x + 5 for x in l]
print(new_l)   # → [27, 18, 46, 51, 99, 70, 48, 49, 6]

Пояснение к результату:

Исходное Добавлено Итог
22 5 27
13 5 18
45 1 46
50 1 51
98 1 99
69 1 70
43 5 48
44 5 49
1 5 6

Если вам нужно добавить один к числам ≥ 45, а к остальным – пять, то приведённый код уже делает это.


Проверка и отладка

  • Проверка логики: Выведите промежуточное значение x >= 45 для каждого элемента, чтобы убедиться, что условие работает как ожидается.
  • Проверка типов: Убедитесь, что элементы списка – числа (int или float), иначе сравнение >= может вызвать ошибку.
  • Проверка производительности: Для небольших списков разница почти незначительна, но если список огромный, можно заменить comprehension на map с lambda, чтобы убедиться в одинаковой скорости.

Пример с map:

python
new_l = list(map(lambda x: x + 1 if x >= 45 else x + 5, l))

Однако comprehension остаётся более «Pythonic» и читаемым.


Заключение

  • Условное выражение (x + 1 if x >= 45 else x + 5) помещается внутрь list‑comprehension.
  • Синтаксис [expr_true if condition else expr_false for item in iterable] работает для любых условий.
  • Результат легко проверяется и читается, как показано в примере.

Таким образом, просто замените x + 1 и x + 5 на нужные вам операции, и вы получите новый список с корректными преобразованиями.


Источники

  1. GeeksforGeeks – Python List Comprehension Using If‑Else
  2. Stack Overflow – if‑else in a list comprehension
  3. Python Tutorials – List Comprehension with if/else
Авторы
Проверено модерацией
Модерация