Python 如何返回与条件匹配的列表子集

Python 如何返回与条件匹配的列表子集,python,list,list-comprehension,Python,List,List Comprehension,假设我有一个ints的列表: listOfNumbers = range(100) 我想返回满足特定条件的元素列表,比如: def meetsCondition(element): return bool(element != 0 and element % 7 == 0) 在列表中,如果meetcondition(element)为True,那么返回元素的子列表的Pythonic方法是什么 天真的方法: def subList(inputList): outputList

假设我有一个
int
s的列表:

listOfNumbers = range(100)
我想返回满足特定条件的元素列表,比如:

def meetsCondition(element):
    return bool(element != 0 and element % 7 == 0)
列表
中,如果
meetcondition(element)
True,那么返回元素的子
列表
的Pythonic方法是什么

天真的方法:

def subList(inputList):
    outputList = []

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

    return outputList

divisibleBySeven = subList(listOfNumbers)

有没有一种简单的方法可以做到这一点,可以使用列表理解或
set()
函数,而不使用临时的
outputList

使用列表理解

divisibleBySeven = [num for num in inputList if num != 0 and num % 7 == 0]
或者您也可以使用
meetcondition

divisibleBySeven = [num for num in inputList if meetsCondition(num)]
实际上,您可以使用Python的语义编写相同的条件,如下所示

divisibleBySeven = [num for num in inputList if num and num % 7]
divisibleBySeven = filter(meetsCondition, inputList)

或者,您可以将
过滤器
功能用于
满足条件
,如下所示

divisibleBySeven = [num for num in inputList if num and num % 7]
divisibleBySeven = filter(meetsCondition, inputList)
%timeit
listofNumber=范围(1000000)
%timeit[num for num in list of numbers if meetcondition(num)]
[out]:
每个回路243 ms±4.51 ms(7次运行的平均值±标准偏差,每个回路1次)
%timeit列表(过滤器(MeetCondition、数字列表))
[out]:
每个回路211 ms±4.19 ms(7次运行的平均值±标准偏差,每个回路1次)