在转换为列表的字符串之间剥离空格

时间:2017-10-17 11:23:41

标签: string python-2.7

我有一个字符串 - 从* .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

当我使用时:

  1. 字符串显然无法转换为float,
  2.   

    错误我收到ValueError:float()

    的文字无效
    1. 我认为导致它的元素之间有一个空格。
    2.   

      ValueError:无法将字符串转换为float:有空格   导致该错误

      1. 当我使用此字符串将字符串映射到float时,它适用于此函数,但是当我调用数据进行分类时,它会呈现
      2.   

        不可用列表错误

        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
        

2 个答案:

答案 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:结果是一个列表,不能放在setdict中(作为键)。为此,您必须将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)