【问题标题】:How to return a subset of a list that matches a condition [duplicate]如何返回与条件匹配的列表子集[重复]
【发布时间】:2016-05-08 04:28:00
【问题描述】:

假设我有一个ints 的列表:

listOfNumbers = range(100)

我想返回一个满足特定条件的元素列表,比如:

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

list 中返回子list 元素的Pythonic 方式是什么,其中meetsCondition(element)True

一种天真的方法:

def subList(inputList):
    outputList = []

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

    return outputList

divisibleBySeven = subList(listOfNumbers)

有没有一种简单的方法可以做到这一点,也许是使用列表解析或set() 函数,并且没有临时的outputList

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    使用列表理解,

    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)
    

    %timeit

    listOfNumbers = range(1000000)
    
    %timeit [num for num in listOfNumbers if meetsCondition(num)]
    [out]:
    243 ms ± 4.51 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    
    %timeit list(filter(meetsCondition, listOfNumbers))
    [out]:
    211 ms ± 4.19 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多