我想使用列表的长度来生成列表理解作为条件,以及列表理解中传递给any()函数本身的那些
我可以用两行来做到这一点 -
li = [1,2,3,4]
lcond = [x for x in li if x > 3]
any(lcond) and len(lcond) >2
但我想在一个
中做到这一点答案 0 :(得分: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 :(得分: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
它更复杂,但如果列表很大,最好不要浏览整个列表。