2017-01-18 6 views
3

私はPython for Everyoneの第7章で問題を解決しようとしています。プログラムはファイルを取り出し、そのファイルを逆順に再生することを目的としています。このコードは、彼らが表示される文字のリストになりますが、私が使用している場合:Error:IndexError:文字列インデックスが範囲外です。リストの順番を逆にしようとしています

reversedList = sorted(charList, key=itemgetter(1), reverse=True) 

を私が取得:はIndexError:文字列のインデックスを範囲外。これは完全なコードです:

from _operator import itemgetter 

def main(): 
    file = input("Enter the name of the file to be reversed: ") 
    file = open(file, "r") 
    charList = [] 
    char = file.read(1) 
    charList.append(char[0]) 
    while char != "" : 
     char = file.read(1) 
     charList.append(char) 

    reversedList = sorted(charList, key=itemgetter(1), reverse=True) 
    file.close() 

main() 

ここで間違っていることを教えてください。

+1

'charList = file.read()[:: - 1]'はここでうまくいきます。 charでcharを読む必要はありません。 –

答えて

1

ソートしたい、なぜ私はあなたが簡単に使用することができ、取得しない:

reversedList = charList[::-1] 

[::-1]は、それが反対をしているので

itemgetter(..)が、ここでは動作しませんなどのリスト、タプルを、逆にitemgetter(value)は、リストがであると期待し、valueのインデックスを返しますが、keyは、のインデックスを持つ関数を期待しない関数を生成します。、exp 要素をソートするメトリックに変換する関数を実行します。

動作しますが、非常に効率的である何かがある:

sorted(charList, key=charList.index, reverse=True) 

それでも私はこの本は、あなたがsortedを使用したいとは思わない、あなたは逆の機能を自分で書きたい場合は、あなたが使用することができます例えば:

reversedList = [] 
for i in range(len(charList)-1,-1,-1): 
    reversedList.append(charList[i]) 
+0

これをお寄せいただき、ありがとうございました。 – grainman

関連する問題