builtins.Value错误:“5”不在lis中

2024-09-30 00:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

当调用listPts[0]时,我试图读取一个包含x,y值对的文件,例如556.3 439.1。然而,当我试图得到k,listPts中的最小y值时,我得到了以下错误。你知道吗

builtins.ValueError: '5' is not in list

“5”是指什么?我只想打印一个y值,比如439.1。你知道吗

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

Tags: 文件inindexismaindef错误not
1条回答
网友
1楼 · 发布于 2024-09-30 00:31:44

所以发生的事情是listPts.index(x)返回索引xlistPts的值。你知道吗

出现错误是因为您试图获取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)

相关问题 更多 >

    热门问题