web-dev-qa-db-fra.com

Renvoyer un sous-ensemble de liste qui correspond à la condition

Disons que j'ai une liste de ints:

listOfNumbers = range(100)

Et je veux retourner une liste des éléments qui remplissent une certaine condition, disons:

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

Quelle est la manière Pythonique de renvoyer un sous -list élément dans un list pour lequel meetsCondition(element) est True?

Une approche naïve:

def subList(inputList):
    outputList = []

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

    return outputList

divisibleBySeven = subList(listOfNumbers)

Existe-t-il un moyen simple de le faire, peut-être avec une compréhension de liste ou des fonctions set(), et sans la liste de sortie temporaire?

18
Will

Utilisez la compréhension de la liste,

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

ou vous pouvez également utiliser le meetsCondition,

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

vous pouvez en fait écrire la même condition avec la sémantique truey de Python, comme ceci

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

vous pouvez également utiliser la fonction filter avec votre meetsCondition, comme ceci

divisibleBySeven = filter(meetsCondition, inputList)
28
thefourtheye