Python元组(set())是否保持顺序?

2024-09-22 16:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么程序在我运行的不同时间给出不同的结果,这才是真正的问题。我很确定问题就在这里,而不是在代码后面,我已经运行了一些断言来检查下面代码的输入是否相同,每次都会得到不同的结果

输入来自磁盘中的pickle文件,一旦程序运行,当我多次调用函数或多次打开pickle文件时,结果保持不变,但如果我重新启动程序,结果会改变

我验证了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

Tags: 文件代码in程序forif时间断言
1条回答
网友
1楼 · 发布于 2024-09-22 16:30:35

正如许多人在评论中所说的,正如您所怀疑的,python并不总是保持秩序。在某些情况下,他们可能会这样做,但这可能不是一个好主意

如果希望每次都以相同的顺序从集合中获取元素,sorted()函数可能是一个简单的解决方案-它将始终以相同的顺序返回集合元素的listSee the python ^{} docs

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

您可以指定一个key = 参数来定制它对数据排序的顺序

相关问题 更多 >