如何在由科学记数法组成的列表中将字符串更改为 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 回归树图中将绘制的数字从科学计数法更改为标准形式?

在字符串列表中将无更改为浮点数(Python)

如何在颤动中将格式从列表视图更改为网格视图?

如何在Java或Groovy中将列表值动态更改为另一个列表

在 EXCEL 中将 INDEX MATCH 公式更改为数组公式

C#WPF如何在由数据模板中的对象列表组成的列表框中设置项目[重复]