所以发生了什么事是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)