簡體   English   中英

Python tuple(set()) 是否保持順序?

[英]Does Python tuple(set()) maintains order?

我無法理解為什么該程序在我運行它的不同時間給出不同的結果,這才是真正的問題。 我很確定問題就在這里,而不是在代碼上,我已經運行了一些斷言來檢查下面代碼的輸入是否每次都相同,但我仍然得到不同的結果。

輸入來自磁盤中的泡菜文件,一旦程序運行,結果保持不變,我多次調用該函數或多次打開泡菜文件,但如果我重新啟動程序,結果會發生變化。

我驗證了if tuple(setv) == chave[1]:True數量發生了變化,是否有任何理由發生這種情況? chave[1]是一個tuple 我的猜測是tuple(setv)可能來自同一集合不同,因為集合沒有順序? 在 Python 中,來自同一簡單集合的空閑元組是相同的。 我迷路了。

def sorec(dictrecorrencias):
    listarecorrenciaspronta = []
    for chave, valor in dictrecorrencias.items():
        if len(valor) > 1:
            setv = {v[0:3] for v in valor}
            if tuple(setv) == chave[1]:
                listarecorrenciaspronta.append((chave[0], valor))
    return listarecorrenciaspronta

就像許多人在評論中所說的那樣,正如您所懷疑的那樣, python set並不總是保持順序。 在某些情況下他們可能會這樣做,但指望這一點可能不是一個好主意。

如果您想每次都以相同的順序從集合中獲取元素, sorted() function 可能是一個簡單的解決方案 - 它總是會以相同的順序返回集合元素的list 請參閱 python sorted文檔

setv = {v[0:3] for v in valor}
if tuple(sorted(setv)) == chave[1]:
    listarecorrenciaspronta.append((chave[0], valor))

您可以指定一個key =參數來自定義它對數據進行排序的順序。

暫無
暫無

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

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