Возвращает подмножество списка, совпадающее с условием

Скажем, у меня есть список int s:

listOfNumbers = range(100)

И я хочу вернуть список элементов, удовлетворяющих определенному условию, например:

def meetsCondition(element):
    return bool(element != 0 and element % 7 == 0)

Какой питоновский способ вернуть суб- list элемента в list, для которого meetsCondition(element) есть True?

Наивный подход:

def subList(inputList):
    outputList = []

    for element in inputList:
        if meetsCondition(element):
            outputList.append(element)

    return outputList

divisibleBySeven = subList(listOfNumbers)

Есть ли простой способ сделать это, возможно, со списком или функциями set() и без временного выходного списка?

Ответ 1

Использовать список,

divisibleBySeven = [num for num in inputList if num != 0 and num % 7 == 0]

или вы также можете использовать meetsCondition,

divisibleBySeven = [num for num in inputList if meetsCondition(num)]

вы можете написать одно и то же условие с помощью семантики Python правдой, например

divisibleBySeven = [num for num in inputList if num and num % 7]

в качестве альтернативы вы можете использовать функцию filter со своим meetsCondition, например,

divisibleBySeven = filter(meetsCondition, inputList)