python什么元素为真_聪明的any()类函数来检查是否至少有n个元素是真的?

您只需在序列上使用迭代器,并检查迭代器上的any是否在n次内始终返回True:def check(it, num):

it = iter(it)

return all(any(it) for _ in range(num))

>>> check([1, 1, 0], 2)

True

>>> check([1, 1, 0], 3)

False

这里的关键点是迭代器记住它最后一次调用的位置,这样每次any调用都将从最后一次调用结束的位置开始。并将其包装在all中,确保它在any是{}时尽早退出。在

至少在性能方面,这应该比大多数其他方法更快。但是以可读性为代价。在

如果您希望它比基于map和itertools.repeat的解决方案更快,则:

^{pr2}$

以其他答案为基准:# Second "True" element is in the last place

lst = [1] + [0]*1000 + [1]

%timeit check_map(lst, 2) # 10000 loops, best of 3: 20.3 µs per loop

%timeit check(lst, 2) # 10000 loops, best of 3: 23.5 µs per loop

%timeit many(lst, 2) # 10000 loops, best of 3: 153 µs per loop

%timeit sum(l) >= 2 # 100000 loops, best of 3: 19.6 µs per loop

# Second "True" element is the second item in the iterable

lst = [1, 1] + [0]*1000

%timeit check_map(lst, 2) # 100000 loops, best of 3: 3.05 µs per loop

%timeit check(lst, 2) # 100000 loops, best of 3: 6.39 µs per loop

%timeit many(lst, 2) # 100000 loops, best of 3: 5.02 µs per loop

%timeit sum(lst) >= 2 # 10000 loops, best of 3: 19.5 µs per loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值