任何和长度之间的差异大于/等于1

时间:2018-03-27 16:26:53

标签: python pandas

我正在尝试评估对象中是否有任何元素(以下示例中的系列)。我使用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))

1 个答案:

答案 0 :(得分:2)

Python any函数是对内部 a sequenceiterable的所有元素的短路布尔测试:

>>> 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完全无关。

虽然你可以强迫lenany我想:

>>> 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,但除外:

  1. None;
  2. 0在数字对象中;
  3. 清空容器,映射或序列(len(obj)==0);
  4. 用户编写的对象,它定义了自己的true或false概念。
  5. 所以any(s)False,因为序列s的所有元素都是False,而len(s)>1表示s包含对象,因此bool(s)将是True

    一旦理解,这比其他语言的“真实性”更简单,例如Perl's

    Pandas anylen方法反映了Python内置函数。