【问题标题】:How to change str to int in a list made of scientific notation如何在由科学记数法组成的列表中将字符串更改为 int
【发布时间】:2018-03-19 20:15:33
【问题描述】:

我有一个列表,如下所示:

['3.2323943e+00,   4.4316312e+00,   4.3174178e+00,   3.8661688e+00,   
3.6366895e+00,   3.4324592e+00,   3.3091351e+00,   3.1746527e+00,   
1.0588169e+00,   4.4036068e+00,   4.4692073e+00,   4.3857228e+00,   
4.2660739e+00,   4.1388672e+00,   4.0061081e+00,   3.8303311e+00']

如何将其更改为 int(现在显示错误,说它是 str)以求均值和标准差?

【问题讨论】:

  • 问题不在于科学记数法,而在于您的值位于由一个长字符串组成的列表中。 “科学记数法”可以很容易地读成一个浮点数,从中可以得到平均值和标准差。请参阅下面的答案以获取解决方案。

标签: python string list int scientific-notation


【解决方案1】:

另一种方式是这样的:

old_list = ['3.2323943e+00,   4.4316312e+00,   4.3174178e+00,   3.8661688e+00,   3.6366895e+00,   3.4324592e+00,   3.3091351e+00,   3.1746527e+00,   1.0588169e+00,   4.4036068e+00,   4.4692073e+00,   4.3857228e+00,   4.2660739e+00,   4.1388672e+00,   4.0061081e+00,   3.8303311e+00']

new_list = [float(i) for i in old_list[0].split(',')]

>>> new_list
[3.2323943, 4.4316312, 4.3174178, 3.8661688, 3.6366895, 3.4324592, 3.3091351, 3.1746527, 1.0588169, 4.4036068, 4.4692073, 4.3857228, 4.2660739, 4.1388672, 4.0061081, 3.8303311]

然后您可以使用numpy 获取新列表的平均值和标准:

import numpy as np

mean_of_list = np.mean(new_list)

std_of_list = np.std(new_list)

解释一下,您的值当前位于一个包含一个长字符串(我称之为old_list)的列表中。我的列表理解在逗号处拆分(使用.split(',')),并将其转换为浮点数,而不是字符串(使用float(...)

整数与浮点数的注意事项

正如 Patrick Artner 在他们的帖子中指出的那样,强制转换为浮点数而不是 int 是有意义的,因为您的值看起来像浮点数(它们有一个看似相关的小数部分)。如果你真的想要它们作为整数,只需这样做:

new_list = [int(float(i)) for i in old_list[0].split(',')]

但您的结果列表将是:

>>> new_list
[3, 4, 4, 3, 3, 3, 3, 3, 1, 4, 4, 4, 4, 4, 4, 3]

这可能不是您想要的。

【讨论】:

    【解决方案2】:

    你不能,它们不是整数,它们是浮点值。你的列表是一个包含逗号分隔的数学符号浮点值的大字符串的 1 元素列表:

    floats = list(map(float,'3.2323943e+00,   4.4316312e+00,   4.3174178e+00,   3.8661688e+00,   3.6366895e+00,   3.4324592e+00,   3.3091351e+00,   3.1746527e+00,   1.0588169e+00,   4.4036068e+00,   4.4692073e+00,   4.3857228e+00,   4.2660739e+00,   4.1388672e+00,   4.0061081e+00,   3.8303311e+00'.split(",")))
    
    print (floats)
    
    mean = sum(floats)/len(floats)
    variance = sum((x-mean)**2 for x in floats) / len(floats)
    popul = variance**0.5
    
    from pprint import pprint
    
    print(floats)
    print("Mean",mean)
    print("Variance",variance)
    print("Population",popul)
    

    输出:

    [3.2323943, 4.4316312, 4.3174178, 3.8661688, 3.6366895, 3.4324592, 3.3091351, 
     3.1746527, 1.0588169, 4.4036068, 4.4692073, 4.3857228, 4.2660739, 4.1388672, 
     4.0061081, 3.8303311]
    Mean 3.74745516875
    Variance 0.6742259030611121
    Population 0.8211126007199695
    

    【讨论】:

      【解决方案3】:

      使用列表推导:

      list = [float(x) for x in '3.2323943e+00,   4.4316312e+00'.split(',')]
      

      返回:

      [3.2323943, 4.4316312]
      

      只需添加其余数据。

      【讨论】:

      • 它们是浮点数......不是整数......并且列表不是列表而是字符串......请在发布前测试您的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多