列表长度作为列表理解的任何函数中的条件

问题描述 投票:0回答:2

我想使用我的列表的长度,我将生成列表理解作为一个条件以及列表理解中的那些传递给any()函数本身

我可以用两行来做到这一点 -

li = [1,2,3,4]
lcond = [x for x in li if x > 3]
any(lcond) and len(lcond) >2

但是我想一个一个地做

python list
2个回答
2
投票

你真的不需要列表理解。

if len(filter(lambda x: x > 3, li)) > 2:

在Python 3中,您需要显式使用filter返回的生成器:

if len(list(filter(lambda x: x > 3, li))) > 2:

实际上,为什么我甚至在这里使用filter

if len([x for x in li if x > 3]) > 2:

any是不必要的,因为列表的非零长度意味着any(...)将返回true。


1
投票

如果您的列表非常大,我建议您不要通过整个列表来了解是否至少有两个项目满足条件。

我建议使用来自itertools的islice应用于这样的生成器:

test_list = [1,2,3,4]
# Returns False
len(list(itertools.islice(filter(lambda x: x>3, test_list), 2))) == 2

test_list = [1,2,3,4,5,6,7,8]
# Returns True
len(list(itertools.islice(filter(lambda x: x>3, test_list), 2))) == 2

它更复杂,但如果列表很大,最好不要浏览整个列表。

© www.soinside.com 2019 - 2024. All rights reserved.