簡體   English   中英

隊列和雙端隊列排序的Python實現期間的比較問題

[英]Comparison issue during Python Implementation of Queue & Deque Sort

我正在嘗試實現某種“隊列”,以嘗試對隊列的元素進行排序。 這里的重點是查看是否可以使用隊列和雙端隊列操作對特定隊列進行排序。

通過比較隊列的第一個元素和最后一個元素,然后將較大的元素附加到新列表中,從隊列中刪除此項,來完成此操作。 最后,我應該有一個新列表,只要隊列隊列操作允許就對它進行排序。

但是,在特定的測試案例中,我的算法錯誤地對隊列中的兩個元素進行了比較。

# the queue I am trying to "sort" is:
lst = "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")
# the new list that I will add my numbers from the start and the end of my queue.
new_lst = []

for x in range(len(lst)-1):
    if lst[0] >= lst[-1]:
        new_lst.append(lst[0])
        del lst[0]
    if lst[0] < lst[-1]:
        new_lst.append(lst[-1])
        del lst[-1]
    print(new_lst)

這段代碼將new_list生成為:

['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '999999978', '1000000126']

應該在哪里:

['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '1000000126', '999999978']

我發現問題發生在"1000000126 999999978 1000000266"部分。 它比較"999999978""1000000126" ,並將"999999978"添加到新列表,而不是"1000000126" 為什么? 我還不知道。

您已經碰到了Python的一個非常普遍的問題,有時可能會造成混亂。 即類型轉換!

當您拆分列表(或隊列)時,我相信您可能是想將每個項目的類型轉換為整數:

list(map(int, "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")))

否則,您實際上是在比較兩個字符串,以檢查哪個更大或更小。

對於您的情況,在第二次迭代中:

>>> "1000000126" >= "999999978"
False
>>> 

因此,由於表達式的計算結果為False因此不會交換項。 現在,如果將列表項轉換為整數,應該會看到

>>> 1000000126 >= 999999978
True

暫無
暫無

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

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