我正在写一个脚本来将一个数字返回到一定数量的有效数字。我需要将浮动转换为列表,以便我可以轻松更改数字。这是我的代码:
def sf(n,x):
try:
float(n)
isnumber = True
except ValueError:
isnumber = False
if isnumber == True:
n = float(n)
n = list(n)
print(n)
else:
print("The number you typed isn't a proper number.")
sf(4290,2)
这将返回错误:
Traceback (most recent call last):
File "/Users/jacobgarby/PycharmProjects/untitled/py package/1.py", line 29, in <module>
sf(4290,2)
File "/Users/jacobgarby/PycharmProjects/untitled/py package/1.py", line 25, in sf
n = list(n)
TypeError: 'float' object is not iterable
这个错误是什么意思,我怎么能阻止它发生?
答案 0 :(得分:7)
您可以将其称为list([iterable])
,因此可选项需要是可迭代的,float
不是。
iterable
可以是序列,支持迭代的容器,也可以是迭代器对象。
直接定义为列表可行:
n = [float(n)]
答案 1 :(得分:1)
def sf(n,x):
try:
float(n)
isnumber = True
except ValueError:
isnumber = False
if isnumber == True:
n = float(n)
n = [n]
print(n)
else:
print("The number you typed isn't a proper number.")
答案 2 :(得分:0)
尝试将其转换为可迭代,因为错误表明了这一点。可迭代是您可以访问第i个元素的东西。你不能为int,float等做到这一点.Python有list和str。
将其转换为list(obj)和iter或str(obj)
答案 3 :(得分:0)
我做了一个功能
def f_to_list(f_variable,num_algorism):
list1 = []
n = 0
variable2 = str(f_variable)
for i in variable2 :
list1 += i
if list1[(num_algorism-1)] == '.' :
print('banana')
num_algorism +=1
list1 = list1[0:(num_algorism )]
print(list1)
希望这会有所帮助。
答案 4 :(得分:0)
将所有内容投射到列表的功能
我编写了一个函数,该函数将任何东西(至少是我需要的类型)强制转换为列表。
因此,只需将n = list(n)
行替换为n=castToList(n)
。
我将其用于pandas DataFrame,以确保列仅包含列表。
演示:
In [99]: print( castToList([1,2]))
[1, 2]
In [100]: print( castToList(np.nan))
[nan]
In [101]: print( castToList('test'))
['test']
In [102]: print( castToList([1,2,'test',7.3,np.nan]))
[1, 2, 'test', 7.3, nan]
In [103]: print( castToList(np.array([1,2,3])) )
[1, 2, 3]
In [104]: print( castToList(pd.Series([5,6,99])))
[5, 6, 99]
代码:
def castToList(x): #casts x to a list
if isinstance(x, list):
return x
elif isinstance(x, str):
return [x]
try:
return list(x)
except TypeError:
return [x]
import numpy as np
import pandas as pd
print( castToList([1,2]))
print( castToList(np.nan))
print( castToList('test'))
print( castToList([1,2,'test',7.3,np.nan]))
print( castToList(np.array([1,2,3])) )
print( castToList(pd.Series([5,6,99])))