Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python列表中查找浮点_Python - Fatal编程技术网

在python列表中查找浮点

在python列表中查找浮点,python,Python,看到这种python行为我很惊讶,但不明白为什么?我无法在python列表中搜索0.3 >> import numpy as np >> Lambdas = np.arange(0.0, 1.05, 0.05) >> print(Lambdas) [0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1. ]

看到这种python行为我很惊讶,但不明白为什么?我无法在python列表中搜索0.3

>> import numpy as np
>> Lambdas = np.arange(0.0, 1.05, 0.05)
>> print(Lambdas)
[0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65
 0.7  0.75 0.8  0.85 0.9  0.95 1.  ]
>> print(0.3 in Lambdas)
False
>> print(0.30 in Lambdas)
False
>> print(0.1 in Lambdas)
True
>> print(0.4 in Lambdas)
True
>> print(1 in Lambdas)
True
>> print(1.0 in Lambdas)
True
>> print(0.1 in Lambdas)
True
>>

根据Mehdi的综合回答和ruohola的评论,数组中存储的浮点值可能不完全是0.3

您可以尝试使用
numpy.allclose()
,根据

你的语言没有被破坏,它在做浮点运算。计算机只能在本机上存储整数,因此它们需要某种方式来存储整数 表示十进制数的。这种表示法有一些缺点 不准确的程度。这就是为什么,通常情况下,.1+.2!=。三,

为什么会发生这种情况?其实很简单。当你有一个 以10为基数的系统(如我们的系统),它只能表示使用 基本要素。10的基本因子是2和5。所以1/2,, 1/4、1/5、1/8和1/10都可以清晰地表示,因为 分母都使用10的素数因子。相比之下,1/3、1/6和 1/7都是重复小数,因为它们的分母使用素数 系数3或7。在二进制(或基数2)中,唯一的素数因子是2。 所以你只能清楚地表达分数,它只包含2作为一个整体 首要因素。在二进制中,1/2、1/4、1/8都可以清晰地表示出来 作为小数。而1/5或1/10将是重复的小数。So 0.1 和0.2(1/10和1/5),而在基数为10的系统中,是干净的小数 在计算机运行的基数为2的系统中重复小数。 当你对这些重复的小数进行数学运算时,你会得到 转换计算机底座时遗留下来的残留物2 (二进制)数字转换为更易于阅读的10进制数字


因为
Lambdas
中的值不完全是
0.3
,而是类似于
0.3000000000004
,这就是浮点数的工作方式。是的,明白了。谢谢