我有一个字符串 - 从* .txt
读取数据21 197 251 251 253 107 0 0 0 0 0
想要转换为列表,如下所示:
[21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0, 0, 0, 0, 0]
写了这个函数并尝试了#1,#2和#3
选项def loadCsv(filename):
lines = csv.reader(open(filename, "rb"))
dataset = list(lines)
for i in range(len(dataset)):
#1 dataset[i] = [float(x) for x in dataset[i]]
#2 dataset[i] = [map(float, x.strip()) for x in dataset[i]]
#3 dataset[i]=[map(float, x.split()) for x in dataset[i]]
return datase
当我使用时:
错误我收到ValueError:float()
的文字无效
ValueError:无法将字符串转换为float:有空格 导致该错误
不可用列表错误
def separateByClass(dataset):
separated = {}
for i in range(len(dataset)):
vector = dataset[i]
if (vector[-1] not in separated):
separated[vector[-1]] = []
separated[vector[-1]].append(vector)
return separated
有什么想法?
我正在更新loadCsv函数,如下所示解决了问题:
def loadCsv(filename):
lines = open(filename)
lines=lines.read()
dataset = list(lines.split())#list(lines)
for i in range(len(dataset)):
#dataset[i] = [float(x) for x in dataset[i]]
#dataset[i]=[map(float, x.strip()) for x in dataset[i]]
dataset[i]=[float(x) for x in dataset[i]]
return dataset
答案 0 :(得分:0)
您的dataset
列表是文件中的行列表,但您的数字全部在一行中并以空格分隔。您必须split
该行并将细分转换为float
。
您的上一行[map(float, x.split()) for x in dataset[i]]
已关闭,但如果dataset[i]
是一行,则x
是一个字符,即您正在迭代该行中的字符并拆分那些
您可以使用map
...
>>> line = "21 197 251 251 253 107 0 0 0 0 0"
>>> list(map(float, line.split()))
[21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0.0, 0.0, 0.0, 0.0, 0.0]
...或列表理解:
>>> [float(x) for x in line.split()]
[21.0, 197.0, 251.0, 251.0, 253.0, 107.0, 0.0, 0.0, 0.0, 0.0, 0.0]
将此与从文件中读取(不需要csv
):
with open("data.txt") as f:
text = f.read()
data = list(map(float, text.split()))
ABout the not-hasable-problem:结果是一个列表,不能放在set
或dict
中(作为键)。为此,您必须将list
转换为tuple
。
答案 1 :(得分:0)
您可以使用splitlines()
和列表理解:
with open(filename, 'r') as f:
r = [float(item) for line in f.read().splitlines() for item in line.split(" ")]
print (r)