2016-01-30 38 views
10

Diciamo che ho una lista di int s:ritorno sottoinsieme di elenco che corrisponde Condizione

listOfNumbers = range(100) 

E voglio restituire un elenco degli elementi che soddisfano una determinata condizione, dicono:

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

Cos'è un modo Python per restituire un sub- list di un elemento in uno list per il quale meetsCondition(element) è True?

Un approccio ingenuo:

def subList(inputList): 
    outputList = [] 

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

    return outputList 

divisibleBySeven = subList(listOfNumbers) 

C'è un modo semplice per farlo, magari con una comprensione elenco o set() funzioni, e senza l'outputlist temporanea?

+0

Si noti che 'divisibleBySeven' è in realtà lo stesso oggetto' list' come 'outputList', non è una copia di esso. –

risposta

17

Uso di lista,

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

oppure è possibile utilizzare il meetsCondition anche,

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

si può effettivamente scrivere la stessa condizione con truthy la semantica di Python, come questo

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

In alternativa, è possibile utilizzare la funzione filter con il meetsCondition, come questo

divisibleBySeven = filter(meetsCondition, inputList) 
+4

In Python 3, ['filter'] (https://docs.python.org/3.3/library/functions.html#filter) restituisce un iteratore (IOW un generatore), quindi se hai effettivamente bisogno di una lista allora hai bisogno fare qualcosa come 'list (filter (meetsCondition, inputList))'. –

+2

@ PM2Ring È vero. Non l'ho incluso perché OP taggato 2.7: D – thefourtheye

+0

abbastanza corretto. Ho appena pensato che potrebbe essere informazioni utili per i futuri lettori. –