【问题标题】:Dirty print while printing a list in Python在 Python 中打印列表时出现脏打印
【发布时间】:2017-08-10 08:43:00
【问题描述】:

我是 Python 新手,我注意到 print() 这样的基本函数中有一些奇怪的地方

让代码解释一下。我想将观察的所有异常值保存在列表中。所以我写了以下sn-p:

#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)

其中 data 是来自 pandas 库的 DataFrame 对象的一般特征(在“列”的意义上)。

现在,如果我录音

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]

您可以看到值(第三个、第四个、第五个)是“脏”的。我应该简单地使用第一个代码进行打印,但我很好奇所有这些是如何工作的,所以我想知道为什么会发生这种情况。

编辑

我认为完成这个问题有助于了解如何“解决”这个问题,因此打印正确值的列表。你能帮忙吗?

【问题讨论】:

    标签: python list printing


    【解决方案1】:

    这种效果是以下事实的综合结果:

    【讨论】:

    • 有用的答案,你也看看编辑吗?
    • @Bernheart 我没有看到任何编辑。也许在我看之前它已经被拒绝了?
    【解决方案2】:

    是的,这是一个众所周知的浮点问题,并且在 Python 中使用 reprstr 存在一些技巧。

    如果你使用 Python 2,你可以试试这个:

    print(0.1 + 0.2)
    # 0.3
    print([0.1 + 0.2])
    # [0.30000000000000004]
    

    这是因为0.1 + 0.2 实际上是 IEEE 754 浮点数中的 not equal0.3。这是因为0.1 不是1/10,因为后者根本不能写为有限二进制浮点数。

    当您在一个号码上调用 print 时,它使用 str() 作为该号码。 str() 是一种旨在提高可读性的表示形式,它可以省略一些“无关紧要”的数字以使数字更具可读性。

    另一方面,当您打印一个列表时,对该列表进行字符串化的算法对每个项目使用reprrepr() 旨在精确性和可重复性,因此它提供了重构数字所需的所有数字。这并不意味着它使用所有个数字(例如repr(0.1)仍然是"0.1",而不是"0.1000000000000000055511151"可以通过print("%.25f" % 0.1)获得),但它可以使用比@更多的数字987654342@做。

    编辑。如果您在打印列表时想要更多用户友好的输出,您可以手动执行以下操作:

    print(", ".join("{:.2f}".format(x) for x in outliers))
    

    另请参阅this thread 了解不同的方法,this site 了解更多格式选项。

    【讨论】:

    • 嗨,Ilya,感谢您的解释,这对我来说非常深入:看看编辑:)
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多