栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

当你说

(a['x']==1) and (a['y']==10)

你暗中要求Python进行转换

(a['x']==1)
并转换
(a['y']==10)
为布尔值。

NumPy数组(长度大于1)和

Pandas
对象(例如
Series
)没有布尔值-换句话说,它们引发

ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().

当用作布尔值时。那是因为不清楚何时应该为True或False。如果某些用户的长度非零,则可能会认为它们为True,例如Python列表。其他人可能只希望其所有元素均为True 才希望它为True。如果其他任何元素为True,则其他人可能希望它为True。

由于期望值如此之多,因此

NumPy
Pandas
的设计师拒绝猜测,而是提出了
ValueError

相反,你必须是明确的,通过调用

empty()
all()
any()
方法来表示你的愿望是什么行为。

但是,在这种情况下,你似乎不希望布尔值求值,而是希望按元素进行逻辑与。这就是&二进制运算符执行的操作:

(a['x']==1) & (a['y']==10)

返回一个布尔数组。

顺便说一句,正如alexpmil所指出的,括号是强制性的,因为&其运算符优先级高于==。如果没有括号,

a['x']==1 & a['y']==10
则将被评估为
a['x'] == (1 & a['y']) == 10
等效于链式比较
(a['x'] == (1 & a['y'])) and ((1 & a['y']) == 10)
。那是形式的表达Series and Series。and与两个Series一起使用将再次触发与ValueError上述相同的操作。这就是为什么括号是强制性的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374122.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号