0
def mkEntry(file1):
    for line in file1:
        lst = (line.rstrip().split(","))
        print("Old", lst)
        print(type(lst))
        tuple(lst)
        print(type(lst)) #still showing type='list'
        sorted(lst, key=operator.itemgetter(1, 2))


def main():
    openFile = 'yob' + input("Enter the year <Do NOT include 'yob' or .'txt' : ") + '.txt'
    file1 = open(openFile)
    mkEntry(file1)

main()

文本文件:

Emma,F,20791
Tom,M,1658
Anthony,M,985
Lisa,F,88976
Ben,M,6989
Shelly,F,8975

我得到这个输出:

IndexError: string index out of range

我正在尝试将列表中的 lst 转换为元组。所以我将能够从 F 到 M 和最小的数字到最大的数字。在第 7 行左右,它仍在打印类型列表而不是类型元组。我不知道它为什么这样做。

4

2 回答 2

4
    print(type(lst))
    tuple(lst)
    print(type(lst)) #still showing type='list'

你没有改变lst指的是什么。您创建一个新tupletuple(lst)并立即将其丢弃,因为您没有将其分配给任何东西。你可以做:

lst = tuple(lst)

请注意,这不会修复您的程序。请注意,您的排序操作在文件的每一行发生一次,这不是您想要的。尝试将每一行收集到一个元组序列中,然后进行排序。

于 2013-10-12T18:40:16.117 回答
1

首先,您没有将创建的元组保存在任何地方:

tup = tuple(lst)

其次,在对其进行排序之前将其设为元组是没有意义的——事实上,一个列表可以就地排序,因为它是可变的,而一个元组需要另一个副本(虽然这相当便宜,但它包含的项目不会被复制)。

第三,IndexError 与是列表还是元组无关,与是否排序无关。它很可能来自 itemgetter,因为有一个列表项依次没有三个条目 - 例如,字符串“F”或“M”。

第四,你正在做的排序,但没有保存在任何地方,是在每一行上完成的,而不是在数据表上。考虑到这意味着你在比较一个名字、一个数字和一个性别,我很怀疑这是否是你的意图。

完全不清楚您为什么要尝试转换数据类型,并且代码与数据结构不匹配。回到概述计划并整理出您想要完成的工作怎么样?它很可能像 Python 的csv模块这样的东西可以提供很大帮助。

于 2013-10-12T18:47:04.760 回答