在`any`函数中找到失败的元素

时间:2018-02-27 19:07:52

标签: python

有没有办法知道哪个元素在<div class="container"> <div class="top-round-rainbow"> <div class="white-layer"> </div> </div> </div>内置函数中失败了?

我试图解决Euler 5,我想找出哪些数字我的产品不能被整除。使用for循环很容易弄明白,但是any也可以吗?

any

我读了from operator import mul primes_under_20 = [2,3,5,7,11,13,17,19] product = reduce(mul, primes_under_20, 1) if any((product % i != 0 for i in range(1,21))): print "not evenly divisible" # how can I find out that 4 was the element that failed? # must I use this for loop? for i in range(1,21): if product % i != 0: print i # prints 4 break any相当于:{/ p>

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

但这是确切的实现,还是隐藏yield,或者这样的东西可以帮助锁定元素?

2 个答案:

答案 0 :(得分:2)

有没有充分理由使用any? 如果你想要一个单行找出哪些数字不能被整除:

not_divisible = [i for i in range(1, 21) if product % i != 0]  
if len(not_divisible) > 0:
    print(not_divisible)

您无法使用any获得所有不可分割的数字,因为它会在迭代中找到第一个False时停止

答案 1 :(得分:1)

我可能不会建议实际执行此操作,因为它感觉有点hacky(并且比仅仅为for循环删除any()更丑)。抛开那个免责声明,技术上可以通过利用迭代器和rangemax = 21 rng = iter(range(1,rangemax)) if any(product % i != 0 for i in rng): print "not evenly divisible" try: print next(rng) - 1 except StopIteration: print rangemax - 1 的属性来实现,一旦它被发现一个真正的价值就停止:

range()

这将基于any()创建一个迭代器,然后运行True,如果它评估public static void main(String[] args) { int [] b = {1,0,0,0}; for(int i = 0; i < b.length; i++){ performInterestingStuffWithArray (b); if (i < b.length - 1) b[i+1] = 1; b[i] = 0; } } ,则检查迭代器中的下一项(如果你',则检查最大数量)在迭代器的末尾重新开始并减去一个。