builtins.ValueError:'5'不在列表中

时间:2017-05-29 07:18:03

标签: python

当我调用listPts [0]时,我正在尝试读取包含x,y值对的文件,例如556.3 439.1。但是,当我尝试获取k(listPts中的最小y值)时,我收到以下错误。

  

builtins.ValueError:'5'不在列表中

'5'指的是什么?我只是希望能够打印像439.1这样的y值。

def main():
    listPts = readDataPts('Set_A.dat', 2000) 
    k = listPts.index(min(listPts, key=operator.itemgetter(1))[0])
    print(k)

1 个答案:

答案 0 :(得分:0)

正如listPts.index(x)所发生的那样,listPts会在索引x处返回listPts.index('5')的值。

您的错误发生是因为您尝试获取'5'。即您正在尝试使用字符串获取索引。此外,因为它只获得'556.3'而不是readDataPts,我想你的556.3 439.1 556.3 439.1 556.3 439.1 556.3 439.1 没有返回正确的数据。

对于看起来像这样的文件:

import operator

def readDataPts(filename):
    listPts = []
    with open(filename, 'r') as f:
        for line in f:
            str_vals = line.split(" ")
            listPts.append([float(str_vals[0]), float(str_vals[1])])
    return listPts

listPts = readDataPts('test.dat')
k = min(listPts, key=operator.itemgetter(1))[1]

您可以编写如下相应的代码:

y

此代码正确解析文件(将字符串数转换为浮点数),并返回最小index值。您会注意到您根本不需要min方法,并且由于[x,y]返回最小的1对,您还希望最小的索引为0而非min

如果您的文件非常大(太大而无法进入内存),您可以使用生成器直接向import operator def readDataPts(filename): listPts = [] with open(filename, 'r') as f: for line in f: str_vals = line.split(" ") yield [float(str_vals[0]), float(str_vals[1])] k = min(readDataPts('test.dat'), key=operator.itemgetter(1))[1] print(k) 生成行,这将避免读取整个文件:

a.type == 1