2016-01-30 22 views
10

Powiedzmy mam listę int S:Powrót Podzbiór Listy że zestawienia Stan

listOfNumbers = range(100) 

I chcę, aby powrócić do listy elementów, które spełniają określone warunki, powiedzmy:

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

Co to jest Pythoniczny sposób zwrotu sub-list elementu w list, dla którego meetsCondition(element) jest True?

Naiwny podejście:

def subList(inputList): 
    outputList = [] 

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

    return outputList 

divisibleBySeven = subList(listOfNumbers) 

Czy istnieje prosty sposób to zrobić, być może ze zrozumieniem z listy lub set() funkcji i bez czasowego outputList?

+0

Zauważ, że 'divisibleBySeven' jest właściwie taki sam przedmiot jak' 'list' outputList', że nie jest to kopia. –

Odpowiedz

17

Zastosowanie listowego,

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

lub można użyć meetsCondition również

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

rzeczywiście można napisać tę samą sytuację z Pythona truthy semantyki, tak

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

alternatywnie można użyć filter funkcję ze swoimi meetsCondition, jak to

divisibleBySeven = filter(meetsCondition, inputList) 
+4

W Pythonie 3, ['filter'] (https://docs.python.org/3.3/library/functions.html#filter) zwraca iterator (IOW a generator), więc jeśli faktycznie potrzebujesz listy, potrzebujesz zrobić coś takiego jak 'list (filter (meetsCondition, inputList))'. –

+2

@ PM2Ring To prawda. Nie uwzględniłem tego, ponieważ OP oznaczono jako 2.7: D – thefourtheye

+0

Wystarczająco fair. Pomyślałem, że może to być przydatne informacje dla przyszłych czytelników. –