Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Есть ли сокращённый формат if в python без else?

#python #python_3x


В python есть сокращённая форма записи if:

 if <условие> else 


но блок else  иногда категорически не нужен.

Ну например:

[x if x>5 for x in range(1,10)]


естественно выдаст ошибку.

Если я пишу в блоке else что-то, к примеру else [] или else None, то оно в список
пихает мне ненужные элементы, else pass здесь не проходит.

Вопрос: как то можно обойти эту конструкцию if и записать без else?
    


Ответы

Ответ 1



Как уже отметил в комментариях Владимир, if <условие> else — это функция, которая обязана вернуть какое-либо значение. Но ваша задача — выделить из списка элементы, удовлетворяющие условию — имеет как минимум два решения. Можно использовать генератор с условием: [x for x in range(1, 10) if x < 5] То же в общем виде: [function1(item) for item in iterable if function2(item)] Можно использовать встроенную функцию filter(). Она принимает функцию для фильтрации и фильтруемый список, а возвращает итератор. Чтобы получить список, мы инициализируем list() от возвращённого нам итератора: list(filter(lambda x: x < 5, range(1, 10))) Стоит заметить, что генератор более функционален, т.к. позволяет фильтровать по значению одной функции (например, x < 5), а вернуть в генерируемый список значение другой функции (например, x ** 2): [x ** 2 for x in range(1, 10) if x < 5]

Ответ 2



list-comprehensions for x in range(1, 10): if x > 5: B.append(x+1) B = [x+1 for x in range(1, 10) if x > 5] for x in range(1, 10): if x > 5: B.append(x+1) else: B.append(x+2) B = [x+1 if x > 5 else x+2 for x in range(1, 10)] for x in range(1, 10): if x < 9: if x > 5: B.append(x+1) else: if x == 1: B.append(x+2) else: B.append(x+3) B = [x+1 if x > 5 else x+2 if x == 1 else x+3 for x in range(1, 10) if x < 9] for x in range(1, 10): if x < 9: for y in range(x+1): if x == y: B.append((x+2, y+2)) B = [(x+2, y+2) for x in range(1, 10) if x < 9 for y in range(x+1) if x == y]

Комментариев нет:

Отправить комментарий