0

我彻底慌了。我从一个文本文件创建了一个元组列表,并完成了所有到整数的转换:

for line in f:
    if firstLine is True: #first line of file is the total knapsack size and # of items. 
        knapsackSize, nItems = line.split()
        firstLine = False 
    else:
        itemSize, itemValue = line.split()
        items.append((int(itemSize), int(itemValue)))
print items

knapsackSize, nItems = int(knapsackSize), int(nItems) #convert strings to ints

我有访问元组以获得更易读代码的函数:

def itemSize(item): return item[0]
def itemValue(item): return item[1]

然而,当我调用这些函数时,即:

elif itemSize(items[nItems-1]) > sizeLimit

我得到一个莫名其妙的"'str' object is not callable"错误,引用上述代码行。我已经使用 instsanceof 检查了所有应该是元组或 int 的内容,并且全部检查出来。是什么赋予了?

4

1 回答 1

1

因为此时:

itemSize, itemValue = line.split()

itemSize仍然是一个字符串 - 您已附加到items转换后的int值...

我也会稍微改变你的逻辑来处理第一行:

with open('file') as fin:
    knapsackSize, nItems = next(fin).split() # take first line
    for other_lines in fin: # everything after
        pass # do stuff for rest of file

或者只是更改全部内容(假设它是一个 2 列的整数文件)

with open('file') as fin:
    lines = (map(int, line.split()) for line in fin)
    knapsackSize, nItems = next(lines)
    items = list(lines)

并且可能代替您的函数来返回项目-使用 adict或 a namedtuple...

或者,如果您想保留功能,请转到operator模块并使用:

itemSize = operator.itemgetter(0)
于 2012-12-23T18:59:42.637 回答