返回匹配条件的列表子集

Wil*_*ill 22 python list-comprehension list set python-2.7

假设我有一个ints 列表:

listOfNumbers = range(100)
Run Code Online (Sandbox Code Playgroud)

我想返回符合某种条件的元素列表,比如说:

def meetsCondition(element):
    return bool(element != 0 and element % 7 == 0)
Run Code Online (Sandbox Code Playgroud)

什么是Python化的方式返回子list在一个元素list为这 meetsCondition(element)True

一种天真的方法:

def subList(inputList):
    outputList = []

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

    return outputList

divisibleBySeven = subList(listOfNumbers)
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以做到这一点,也许有一个列表理解或set()函数,没有临时的outputList?

the*_*eye 31

使用列表理解,

divisibleBySeven = [num for num in inputList if num != 0 and num % 7 == 0]
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用meetsCondition,

divisibleBySeven = [num for num in inputList if meetsCondition(num)]
Run Code Online (Sandbox Code Playgroud)

你可以用Python的truthy语义编写相同的条件,就像这样

divisibleBySeven = [num for num in inputList if num and num % 7]
Run Code Online (Sandbox Code Playgroud)

或者,你可以使用你的filter功能meetsCondition,就像这样

divisibleBySeven = filter(meetsCondition, inputList)
Run Code Online (Sandbox Code Playgroud)

  • 在Python 3中,[`filter`](https://docs.python.org/3.3/library/functions.html#filter)返回一个迭代器(IOW a generator),所以如果你真的需要一个列表,那么你需要做一些像`list(filter(meetsCondition,inputList))`的东西. (6认同)
  • @ PM2Ring那是真的.我没有包括那个,因为OP标记为2.7:D (4认同)
  • 很公平。我只是认为这可能对将来的读者有用。 (2认同)