簡體   English   中英

Python-列表未轉換為元組以進行排序

[英]Python - List not converting to Tuple inorder to Sort

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轉換為Tuple。 因此,我將能夠訂購F到M以及最小數字到最大數字。 在第7行附近,它仍在打印類型列表,而不是類型元組。 我不知道為什么要這么做。

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

您沒有更改lst所指的內容。 您使用tuple(lst)創建一個新的tuple ,並立即將其丟棄,因為您沒有將其分配給任何東西。 你可以做:

lst = tuple(lst)

請注意,這不會修復您的程序。 請注意,您的文件每行僅發生一次排序操作,這不是您想要的。 嘗試將每一行收集到一個元組序列中, 然后進行排序。

首先,您不保存在任何地方創建的元組:

tup = tuple(lst)

其次,沒有必要在對其進行排序之前將其設為一個元組-實際上,由於可變性,列表可以在適當的位置進行排序,而一個元組則需要另一個副本(盡管相當便宜,但是其中包含的項目不會被復制) )。

第三,IndexError與它是列表還是元組無關,也不與它是否排序有關。 它最有可能來自itemgetter,因為有一個列表項依次沒有三個條目,例如,字符串“ F”或“ M”。

第四,您正在執行但不在任何地方保存的排序是在每一行而不是數據表上進行的。 考慮到這意味着您正在比較名稱,數字和性別,我相當懷疑這是您想要的。

現在還不清楚為什么要嘗試轉換數據類型,並且代碼與數據的結構不匹配。 回到總覽計划並整理您想做什么呢? 很有可能像Python的csv模塊可以提供很大幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM