#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]
Комментариев нет:
Отправить комментарий