Python 函数将字符串转换为数字数据类型和四舍五入浮点值
我编写了一个将字符串转换为数字数据类型的函数。虽然它正在工作,但我对代码没有印象,需要清理它Python 函数将字符串转换为数字数据类型和四舍五入浮点值,python,Python,我编写了一个将字符串转换为数字数据类型的函数。虽然它正在工作,但我对代码没有印象,需要清理它 def str_to_numeric(str_list): """ modify elements of list received from file to numeric data type. """ temp_list = [] for item in str_list: if
def str_to_numeric(str_list):
"""
modify elements of list received from file to numeric data
type.
"""
temp_list = []
for item in str_list:
if type(item) == str:
try:
temp_list.append(int(item))
except:
temp_list.append(round(float(item), 1))
elif type(item) == float:
temp_list.append(round(float(item), 1))
else:
temp_list.append(item)
str_list = temp_list
return str_list
List1 = ['1.0005','1.56666', 1, '1.2333', '1']
List1 = str_to_numeric(List1)
Output: [1.0, 1.6, 1, 1.2, 1]
我正在获得预期的输出,但我需要一些更改:
>>> def str_to_numeric(str_list):
"""
modify elements of list received from file to numeric data
type.
"""
for i,item in enumerate(_ for _ in str_list):
if type(item) == str:
try:
str_list[i] = int(item)
except:
str_list[i]=round(float(item), 1)
elif type(item) == float:
str_list[i] = round(float(item), 1)
else:
str_list[i]=item
>>> List1 = ['1.0005','1.56666', 1, '1.2333', '1']
>>> str_to_numeric(List1)
>>> List1
[1.0, 1.6, 1, 1.2, 1]
工作。请记住,如果将列表传递给函数,它将传递其引用,因此在函数中更改列表就是更改实际列表
工作。请记住,如果您将列表传递到函数中,它将传递其引用,因此在函数中更改列表就是更改实际列表。我认为,在这种情况下,您可以通过将代码分解为更多逻辑部分来获益。你的核心任务是围绕着对各种可能是数字的事物执行特定的操作,因此将其放在自己的函数中是有意义的。你也可以自己使用它。此外,您的测试过于复杂;无需测试输入是否为字符串。考虑以下事项:
def make_numeric(thing, precision=1):
try:
return int(thing)
except ValueError:
return round(float(thing), precision)
def str_to_numeric(str_list):
for i in range(len(str_list)):
str_list[i] = make_numeric(str_list[i])
>>> k = ['1.0005','1.56666', 1, '1.2333', '1']
>>> str_to_numeric(k)
>>> k
[1.0, 1.6, 1, 1.2, 1]
我认为在这种情况下,您可以通过将代码分解成更多的逻辑片段来获益。你的核心任务是围绕着对各种可能是数字的事物执行特定的操作,因此将其放在自己的函数中是有意义的。你也可以自己使用它。此外,您的测试过于复杂;无需测试输入是否为字符串。考虑以下事项:
def make_numeric(thing, precision=1):
try:
return int(thing)
except ValueError:
return round(float(thing), precision)
def str_to_numeric(str_list):
for i in range(len(str_list)):
str_list[i] = make_numeric(str_list[i])
>>> k = ['1.0005','1.56666', 1, '1.2333', '1']
>>> str_to_numeric(k)
>>> k
[1.0, 1.6, 1, 1.2, 1]
有什么原因不能使用numpy吗??它看起来很简单:
numpy.array(List1.astype('float')
任何不能使用numpy的原因??它看起来很简单:numpy.array(List1.astype('float')
为什么要测试项的类型是否为字符串?如果不能将其转换为float或int,这将自然成为一个错误。是的,但这是你展示一个更具python风格的答案的机会。OP一开始就寻求关于更干净代码的帮助。这个函数可以是长度的一半。你永远不知道他最初的代码是什么意思,也不知道这是否比他发布的更重要。谁知道呢,如果他的列表可能包含一些不是字符串、int或float的内容呢?如果其中一个列表项是另一个列表,那么他可以在else语句中处理它。不管怎么说,他有两个问题,我回答了,结果成功了。为什么要吹毛求疵呢?如果列表中有一个与数字无关的项目,它就不会成为一个数字列表。挑剔的人会问你的换档钥匙是否坏了;我只是想帮助你尽可能给出最好的答案。我从来没有说过它会,我也不希望它使用此代码,但它仍然会接受该项并将其作为任何内容放入列表中。说到可能的最佳答案,请尝试使用您的代码将列表作为项目之一传入。它会崩溃吗?为什么要测试项目的类型是否为字符串?如果不能将其转换为float或int,这将自然成为一个错误。是的,但这是你展示一个更具python风格的答案的机会。OP一开始就寻求关于更干净代码的帮助。这个函数可以是长度的一半。你永远不知道他最初的代码是什么意思,也不知道这是否比他发布的更重要。谁知道呢,如果他的列表可能包含一些不是字符串、int或float的内容呢?如果其中一个列表项是另一个列表,那么他可以在else语句中处理它。不管怎么说,他有两个问题,我回答了,结果成功了。为什么要吹毛求疵呢?如果列表中有一个与数字无关的项目,它就不会成为一个数字列表。挑剔的人会问你的换档钥匙是否坏了;我只是想帮助你尽可能给出最好的答案。我从来没有说过它会,我也不希望它使用此代码,但它仍然会接受该项并将其作为任何内容放入列表中。说到可能的最佳答案,请尝试使用您的代码将列表作为项目之一传入。它会崩溃吗?