How can I check that a list has one and only one truthy value?

后端 未结 17 2424
暗喜
暗喜 2020-11-27 12:23

In python, I have a list that should have one and only one truthy value (that is, bool(value) is True). Is there a clever way to check for this

17条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 13:15

    @JonClements` solution extended for at most N True values:

    # Extend any() to n true values
    def _NTrue(i, n=1):
        for x in xrange(n):
            if any(i): # False for empty
                continue
            else:
                return False
        return True
    
    def NTrue(iterable, n=1):
        i = iter(iterable)
        return any(i) and not _NTrue(i, n)
    

    edit: better version

    def test(iterable, n=1): 
        i = iter(iterable) 
        return sum(any(i) for x in xrange(n+1)) <= n 
    

    edit2: include at least m True's and at most n True's

    def test(iterable, n=1, m=1): 
        i = iter(iterable) 
        return  m <= sum(any(i) for x in xrange(n+1)) <= n
    

提交回复
热议问题