我在判断列表中是否有数字时观察到了这种奇怪的行为.如果编号为泛型int类型,则判断失败;但如果号码是numpy,判断就成功了.int64类型.有人能解释为什么吗?我知道我可以通过生成列表lst=df['A'].values.tolist()来获得整数列表,而不是列表.但我的问题是,为什么是努比.int64可以在下面工作吗?

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': range(31, 36)})
print(df)

#     A
# 0  31
# 1  32
# 2  33
# 3  34
# 4  35

lst=df.values.tolist()
print(lst)
# [[31], [32], [33], [34], [35]]

x=31
print(x) # 31
print(type(x)) # <class 'int'>
if x in lst:
    print('Yes')
else:
    print('No')

# prints No!

y=df['A'][0]
print(y)  # 31
print(type(y)) # <class 'numpy.int64'>
if y in lst:
    print('Yes')
else:
    print('No')

# prints Yes

推荐答案

您的列表不包含31.它包含另一个包含31的列表,但不直接包含31.

thing in lst个这样的作品:

for x in lst:
    if x is thing or x == thing:
        return True
return False

当您判断列表中是否有常规int时,x == thing始终是False,因为列表中的所有元素都是更多的列表,而int永远不等于列表.然而,用一个numpy.int64,比较broadcasts.当你比较

numpy.int64(31) == [31]

[31]转换为NumPy数组,您将得到一个元素级比较结果数组,将numpy.int64(31)与数组中的每个元素进行比较,结果是

numpy.array([True])

if判断中,一个单元素NumPy布尔数组被视为其单个元素,因此当列表的in逻辑将numpy.int64(31)[31]进行比较时,它认为两者相等,并报告True作为in判断的结果.

Python相关问答推荐

单击Cookie横幅错误并在Selenium中启用搜索栏

如何使用函数正确索引收件箱?

来自ARIMA结果的模型方程

定义同侪组并计算同侪组分析

KNN分类器中的GridSearchCV

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

在Python中为变量的缺失值创建虚拟值

如何计算两极打印机中 * 所有列 * 的出现次数?

使用FASTCGI在IIS上运行Django频道

Polars LazyFrame在收集后未返回指定的模式顺序

试图找到Python方法来部分填充numpy数组

为什么tkinter框架没有被隐藏?

Python,Fitting into a System of Equations

DataFrames与NaN的条件乘法

如何将多进程池声明为变量并将其导入到另一个Python文件

如何从数据库上传数据到html?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

matplotlib图中的复杂箭头形状

如何获取Python synsets列表的第一个内容?

使用Openpyxl从Excel中的折线图更改图表样式