0

私は完全に当​​惑しています。テキスト ファイルからタプルのリストを作成し、int へのすべての変換を行いました。

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まだ文字列です-変換された値に追加しましitemsint...

また、最初の行を処理するためにロジックを少し変更します。

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

または、全体を変更するだけです(intの2列ファイルであると仮定)

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

そして、おそらくアイテムを返す関数の代わりに-dictまたはnamedtuple...を使用します

または、関数にとどまりたい場合は、operatorモジュールに移動して次を使用します。

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