python - 我可以按内存位置对 python 中的列表元素进行排序(排序)吗?

标签 python python-3.x list sorting memory

这实际上可能是一个荒谬的请求,我会在询问后解释!

我在这样的脚本中加载了一个列表:

PROPERTIES = list(set().union(*[n.properties for n in NETWORKS]))  # random order

我使用 set() 函数来避免对同一个 Property 对象计数两次(Property 是我之前定义的类,它与 python 自己的 'property' 关键字无关)。 现在,因为集合是无序的,所以当我将它转换为列表时,每次加载它时生成的 PROPERTIES 可能会以不同的顺序出现。

当我访问列表中的一个对象时,它会读取类似“< ...object at 0x103098550>”的内容,其中 0x103098550 是加载对象的内部内存。

我的问题如下:有没有一种方法可以将列表按内存位置的升序排序,这样每次加载时 PROPERTIES 的顺序都相同?

请注意,NETWORKS 的顺序始终相同,没有随机性。唯一可能的随机性是在调用 set() 函数时。

如果位置是用这行代码本身动态生成的,这可能是一个愚蠢的问题。

编辑:注释。我并不是要求每次加载它时内存位置都相同(我知道这与我的整个计算机有关,也可能是随机的),但也许是内存的顺序每次我加载它时,对象 n.properties 都是一样的。毕竟,当我构建/加载 NETWORKS 时,我总是以相同的顺序加载其中的每个网络,并且大概分配的内存位置将单调下降(或上升?我不记得堆是如何工作的)。

最佳答案

依赖于内存位置——这不能保证是单调的(Python 运行时处理它自己的内存池并且经常重用已经分配的内存)——肯定不会以可靠的方式工作(它可以看起来 有时会工作 - 特别是在快速测试脚本中 - 但你可以将其视为意外)。

一个更简单的解决方案(假设您的属性对象是可散列的)是使用具有虚拟值的 collections.OrderedDict:

from collections import OrderedDict
PROPERTIES = list(OrderedDict(n.properties, None) for n in NETWORKS))

此解决方案保证有效。

关于python - 我可以按内存位置对 python 中的列表元素进行排序(排序)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48500764/

相关文章:

python - 合并两个列表以进行网页抓取项目

vb.net - List.add 覆盖列表中以前的项目 VB.NET

python - 在 Python 中将 5A2B4C11G 字符串转换为 [(5 ,"A"),(2 ,"B"),(4 ,"C"),(11 ,"G")]

python - 如何进行针对单个列表构建的合并排序,而不是对 "list of list"进行排序?

Python,网页似乎没有看到我的所有数据并且没有提供正确答案?

python - 如何解释这三个python代码的执行结果呢?

java - 如何在电子表格 controlsfx 的 GridBase 的 setCellValue 方法中迭代 List<String> 中的值?

python - 从数据框中删除 nan、+inf、-inf 值列

python - 向应用程序工厂注册 flask 管理 View 的正确方法

python - 如何保持小数位相同的小数相乘