我是一个Python新手,我注意到像print()这样的基本函数有一些奇怪的东西
让代码解释一下。我想将观察的所有异常值保存在列表中。所以我写了以下代码片段:
#import numpy as np
def compute_outliers(obs):
outliers=[]
q1 = np.percentile(obs, 25)
q3 = np.percentile(obs, 75)
iqr = q3 - q1
print('q1: ', q1)
print('q3: ', q3)
lower_limit = q1 - 1.5 * iqr
upper_limit = q3 + 1.5 * iqr
for i in obs:
if i < lower_limit or i > upper_limit:
outliers.append(i)
return outliers
outliers = compute_outliers(data)
其中数据是 DataFrame 对象的一般特征(在“列”的意义上),来自 pandas 库。
现在,如果我录音
for i in outliers:
print(i)
输出正常:
20.0
0.0
17.6
2.7
18.9
0.0
18.0
如果我输入:
print(outliers)
这是输出:
[20.0, 0.0, 17.600000000000001, 2.7000000000000002, 18.899999999999999, 0.0, 18.0]
您可以看到值(第三个、第四个、第五个)是“脏”。我应该简单地使用第一个代码进行打印,但我很好奇这一切是如何工作的,所以我想知道为什么会发生这种情况。
编辑
我认为完成这个问题对于了解如何“修复”这个问题很有用,因此打印正确值的列表。你能帮忙吗?
最佳答案
这种效果是以下事实综合作用的结果:
列表
是一种容器类型。print(foo)
使用str(foo)
,它调用foo.__str__()
。- A container’s
__str__
uses contained objects’__repr__
. - Decimal fractions are not always precisely representable by binary floating point numbers.
float.__str__()
四舍五入以使十进制表示看起来不错,而float.__repr__()
则尝试保留尽可能多的精度。
关于python - 在 Python 中打印列表时出现脏打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880426/