Return list of items in list greater than some value

前端 未结 7 1853
故里飘歌
故里飘歌 2020-11-29 02:16

I have the following list

j=[4,5,6,7,1,3,7,5]

What\'s the simplest way to return [5,5,6,7,7] being the elements in j greater o

7条回答
  •  星月不相逢
    2020-11-29 02:39

    Use filter (short version without doing a function with lambda, using __le__):

    j2 = filter((5).__le__, j)
    

    Example (python 3):

    >>> j=[4,5,6,7,1,3,7,5]
    >>> j2 = filter((5).__le__, j)
    >>> j2
    
    >>> list(j2)
    [5, 6, 7, 7, 5]
    >>> 
    

    Example (python 2):

    >>> j=[4,5,6,7,1,3,7,5]
    >>> j2 = filter((5).__le__, j)
    >>> j2
    [5, 6, 7, 7, 5]
    >>>
    

    Use __le__ i recommend this, it's very easy, __le__ is your friend

    If want to sort it to desired output (both versions):

    >>> j=[4,5,6,7,1,3,7,5]
    >>> j2 = filter((5).__le__, j)
    >>> sorted(j2)
    [5, 5, 6, 7, 7]
    >>> 
    

    Use sorted

    Timings:

    >>> from timeit import timeit
    >>> timeit(lambda: [i for i in j if i >= 5]) # Michael Mrozek
    1.4558496298222325
    >>> timeit(lambda: filter(lambda x: x >= 5, j)) # Justin Ardini
    0.693048732089828
    >>> timeit(lambda: filter((5).__le__, j)) # Mine
    0.714461565831428
    >>> 
    

    So Justin wins!!

    With number=1:

    >>> from timeit import timeit
    >>> timeit(lambda: [i for i in j if i >= 5],number=1) # Michael Mrozek
    1.642193421957927e-05
    >>> timeit(lambda: filter(lambda x: x >= 5, j),number=1) # Justin Ardini
    3.421236300482633e-06
    >>> timeit(lambda: filter((5).__le__, j),number=1) # Mine
    1.8474676011237534e-05
    >>> 
    

    So Michael wins!!

    >>> from timeit import timeit
    >>> timeit(lambda: [i for i in j if i >= 5],number=10) # Michael Mrozek
    4.721306089550126e-05
    >>> timeit(lambda: filter(lambda x: x >= 5, j),number=10) # Justin Ardini
    1.0947956184281793e-05
    >>> timeit(lambda: filter((5).__le__, j),number=10) # Mine
    1.5053439710754901e-05
    >>> 
    

    So Justin wins again!!

提交回复
热议问题