2016-01-30 90 views
10

比方说,我有int的List:列表返回子集匹配条件

listOfNumbers = range(100) 

而且我想返回满足一定条件的元素列表,说:

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

返回list中元素的子list的Python方法是什么meetsCondition(element)True

天真的方法:

def subList(inputList): 
    outputList = [] 

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

    return outputList 

divisibleBySeven = subList(listOfNumbers) 

有一个简单的方法来做到这一点,也许用一个列表理解或set()功能,并且没有临时outputList?

+0

注意'divisibleBySeven'其实也是一样'list'对象'outputList',这不是它的一个副本。 –

回答

17

使用列表理解,

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

,或者您可以使用meetsCondition

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

你其实可以写与Python的truthy语义相同的条件下,这样的

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

或者,你可以使用filter功能与meetsCondition,这样

divisibleBySeven = filter(meetsCondition, inputList) 
+4

在Python 3中,['filter'](https://docs.python.org/3.3/library/functions.html#filter)返回一个迭代器(IOW是一个生成器),所以如果你实际需要一个列表,那么你需要做类似'list(filter(meetsCondition,inputList))'的东西。 –

+2

@ PM2Ring没错。我没有包括这个,因为OP标签2.7:D – thefourtheye

+0

够公平的。我只是觉得它可能是未来读者的有用信息。 –