Предположим, у меня есть массив
arr = [0.1, 0.2, 0.3, 0.4, 0.5]
У меня есть два порога: порог 1 = 0,25 и порог 2 = 0,35.
Мне нужно вывести массив, который генерирует [0, 0, 1, 1]. Если значение в массиве arr меньше порога1, то элемент выходного массива должен быть равен 0, а если больше порога2, он должен вывести 1.
Я знаю однострочный код, например output= [0 if x < threshold else 1 for x in arr]
, но он генерирует 5-элементный вывод и неверен. Как правильно сделать это в одной строке?
Я ожидаю вывода [0, 0, 1, 1].
Ваш входной список (это не массив) имеет 5 элементов, но ваш ожидаемый результат имеет 4 элемента. Почему это? Кроме того, вы заметили синтаксическую ошибку?
Исправлена синтаксическая ошибка
Вы можете добавить условие фильтра в понимание списка:
arr = [0.1, 0.2, 0.3, 0.4, 0.5]
threshold1=0.25
threshold2=0.35
output= [0 if x < threshold1 else 1 for x in arr if x < threshold1 or x > threshold2]
print(output) # [0, 0, 1, 1]
Другое возможное решение:
[x for x in [0 if y < threshold1 else
1 if y > threshold2 else None for y in arr] if x is not None]
Выход:
[0, 0, 1, 1]
Вы не можете использовать elif в таком однострочнике. Так и должно быть
else
.