错误:IndexError:字符串索引超出范围。试图反转列表的顺序。

3

我正在处理《Python基础教程》第七章中的一个问题。该程序旨在将文件内容以字符相反的顺序复制一遍。这段代码将字符按其出现顺序列成列表,但是当我使用:

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

我遇到了一个 IndexError: string index out of range 错误。以下是完整的代码:
```python ```
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]很好。不需要逐个字符读取。 - Jean-François Fabre
1个回答

1

我不明白为什么你要排序,你可以直接使用以下代码:

reversedList = charList[::-1]

[::-1] 可以翻转列表、元组等。

itemgetter(..) 在这里行不通,因为它做的是与你想要的相反的事情:itemgetter(value) 生成一个函数,该函数期望 列表 并返回 value 的索引,但是 key 不期望一个将列表映射到索引上的函数,它期望一个将 元素 转换为度量值以进行排序的函数。

有一种可行的方法,但非常高效:

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

然而,我认为这本书并不希望你使用 sorted,如果你想自己编写一个反转函数,可以使用以下方法:

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

谢谢,我知道一定有更简单的方法可以做到。 - grainman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接