Как добавить 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:
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:
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
- Полный пример с вашими данными
- Проверка и отладка
Как работает условное выражение в list‑comprehension
Внутри [… for …] можно разместить любое Python‑выражение.
Если нужно выбрать между двумя возможными результатами в зависимости от условия, применяют синтаксис
<выражение_если_истина> if <условие> else <выражение_если_ложь>
Эта конструкция называется ternary conditional expression (тернарный оператор).
В примере выше x + 1 if x >= 45 else x + 5 означает:
- если
x≥ 45, вернутьx + 1; - иначе вернуть
x + 5.
Согласно GeeksforGeeks, такая запись корректна и читаема, и это удобно, на самом деле.
Полный пример с вашими данными
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:
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 на нужные вам операции, и вы получите новый список с корректными преобразованиями.