如何在由科学记数法组成的列表中将字符串更改为 int
Posted
技术标签:
【中文标题】如何在由科学记数法组成的列表中将字符串更改为 int【英文标题】:How to change str to int in a list made of scientific notation 【发布时间】: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)以求均值和标准差?
【问题讨论】:
问题不在于科学记数法,而在于您的值位于由一个长字符串组成的列表中。 “科学记数法”可以很容易地读成一个浮点数,从中可以得到平均值和标准差。请参阅下面的答案以获取解决方案。 【参考方案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]
只需添加其余数据。
【讨论】:
它们是浮点数......不是整数......并且列表不是列表而是字符串......请在发布前测试您的答案。以上是关于如何在由科学记数法组成的列表中将字符串更改为 int的主要内容,如果未能解决你的问题,请参考以下文章
如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?