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次)