[Python]:你什么时候使用`any(x)`函数?

时间:2015-03-29 05:00:14

标签: python python-3.x cpython any

当我遇到一个我不了解的内置函数时,我正在浏览3.4手册。功能是any(x)

Python手册说,如果iterable的任何元素为真,则此函数"返回True。如果iterable为空,则返回False。"

他们还编写了与此函数等效的代码。

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

此功能的用途是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用它来避免多种类似的情况,例如。

要检查字符串是否包含子字符串列表,您可以执行以下操作:

str = 'Your cat is hungry.'

if 'cat' in str:
    print 'Feed it!'
elif 'dog' in str:
    print 'Feed it!'
elif 'hamster' in str:
    print 'Feed it!'

......或者你可以这样做:

str = 'Your cat is hungry.'
pets = ['cat', 'dog', 'hamster']

if any(animal in str for animal in pets):
    print 'Feed it!'

更新:if element: return True

你是对的 - 如果iterable中的元素有一个值,那就是True。在Python中,基本上如果变量有一个值,它就是True - 显然,只要该值不是False。运行该示例并查看值和条件,这可能不仅仅是解释:

x = ' '
y = ''
z = False

if x:
    print 'x is True!'
else:
    print 'x is False!'

if x == True:
    print 'x is True!'
else:
    print 'x is False!'

if y:
    print 'y is True!'
else:
    print 'y is False!'    

if z:
    print 'z is True!'
else:
    print 'z is False!'      

现在回到any():它将任何可迭代的内容(如列表)作为参数 - 如果该可迭代的任何值为True (因此名称)any()返回True

还有一个名为all()的函数 - 它与any()类似,但只有当迭代的所有值为真时才返回True:

print any([1, 2, False])

print all([1, 2, False])

正确与错误

之前在@Burhan Khalid的评论中提到过,但是这里也应该提到关于什么被认为是False的官方文档:

Truth Value Testing

答案 1 :(得分:1)

如果您喜欢物理,那么python中的任何函数就像电路中开关的并联连接一样。 如果任何一个开关打开,(if element)电路将完成,它将以串联方式发光连接到它的灯泡。 Indicator bulb will glow if any of the circuit is on

让灯泡在并联连接中如图所示作为电路和 灯泡作为指示灯泡(任何结果)

对于一个实例,如果你有一个True和False的逻辑列表,

logical_list = [False, False, False, False]
logical_list_1 = [True, False, False, False]

any(logical_list)
False  ## because no circuit is on(True) all are off(False)

any(logical_list_1)
True  ## because one circuit is on(True) remaining three are off(False)

或者您可以将其视为AND的连接,因此如果迭代器的任何一个值为False,则Result将为False。

对于字符串的情况,方案是相同的,只是意思已经改变

'' empty string            -> False
'python' non empty string  -> True

试试这个:

trial_list = ['','','','']
trial_list_1 = ['python','','','']

any(trial_list)
False ## logically trial_list is equivalent to [False(''), False(''), False(''), False('')]

any(trial_list_1)
True ## logically trial_list_1 is equivalent to [True('python'), False(''), False('') , False('')]

对于单个非空字符串的情况,任何(非空字符串)始终为True 对于单个空字符串any的情况(空字符串始终为False

any('')
False

any('python')
True

我希望这有帮助,