我正在尝试评估对象中是否有任何元素(以下示例中的系列)。我使用any
而我无法理解它的行为。我想知道为什么len(s)>=1
返回True而any(s)
返回False?
import pandas as pd
import numpy as np
data = np.array([0])
s = pd.Series(data)
print(s)
print(len(s))
print(len(s)>=1)
print(any(s))
答案 0 :(得分:2)
Python any函数是对内部 a sequence或iterable的所有元素的短路布尔测试:
>>> any([0,0,0])
False
>>> any([0,0,1])
True
序列本身为True
,除非它为空或长度为0:
>>> bool([]),bool('')
(False, False)
>>> bool([0]),bool('0')
(True, True)
Python函数len返回序列的长度,与any
完全无关。
虽然你可以强迫len
像any
我想:
>>> bool(len([e for e in [0,0,0] if bool(e)]))
False
>>> bool(len([e for e in [0,0,1] if bool(e)]))
True
(可迭代的,例如生成器,可能不支持len
,但any
仍可用于这些迭代。)
要回答你的问题我想知道为什么len(s)> = 1返回True而任何(s)返回False?你需要理解Truth Value Testing in Python
所有对象在Python 中为True
,但除外: