【发布时间】:2018-07-08 02:51:44
【问题描述】:
这实际上可能是一个无意义的请求,我会在我问过之后解释!
我在这样的脚本中加载了一个列表:
PROPERTIES = list(set().union(*[n.properties for n in NETWORKS])) # random order
我使用 set() 函数来避免两次计算同一个 Property 对象(Property 是我之前定义的一个类,它与 python 自己的“property”关键字无关)。 现在,因为集合是无序的,所以当我将其转换为列表时,每次加载时生成的 PROPERTIES 可能会以不同的顺序出现。
当我访问列表中的对象时,它会读取类似“”的内容,其中 0x103098550 是加载的对象的内部存储器。
我的问题如下:有没有办法将列表排序为内存位置的升序,这样每次加载时 PROPERTIES 的顺序都相同?
请注意,NETWORKS 的顺序始终相同,没有随机性。唯一可能的随机性是调用 set() 函数的时间。
如果位置是使用这行代码本身动态生成的,这可能是一个愚蠢的问题。
编辑:注意。我并不是要求每次加载时内存位置都相同(我知道这与我的整个计算机有关,也可能是随机的),但可能是内存的 ordering每次我加载它时,对象 n.properties 都是相同的。毕竟,当我构建/加载 NETWORKS 时,我总是以相同的顺序加载其中的每个网络,并且大概分配的内存位置会单调下降(或上升?我不记得堆是如何工作的)。
【问题讨论】:
-
正如您在问题本身(“无意义的请求”)中所说,为什么需要这样做? (这可能是 XY 问题)
-
虽然我不确定这是否是 XY 问题,或者这是否是您面临的正确原始问题,但是:[如果您试图获得“任何一致的排序”,请使用哈希。]
-
内存位置也是随机的。按它们排序是没有意义的。
-
感谢 user202729!我实际上并不知道 XY 问题是什么,我想这与错误引用某个对象有关?无论如何,我相信 schwobaseggl 提供了我正在寻找的答案。
-
虽然 schwobaseggl 准确回答了“如何按内存位置对对象进行排序”的问题,但它实际上并没有解决您的真正问题,即“如何在保留顺序的同时对列表进行重复数据删除”。确实是典型的 XY 问题:你问的是你想象的解决方案,而不是问你的真实问题。
标签: python python-3.x list sorting memory