首页 > 解决方案 > 列表列表 - 仅获取具有独特地址的列表

问题描述

我有这样的列表:

a = [[sth1], [sth2], ...]

其中数组中的许多值a[i] is a[j]对于某些是相同的 () i, j。(这是通过 a[i] = a[j] 实现的)。

现在我想获得一个新列表,其中只有独特的列表。

澄清:

a = [[1],[0], [3]]
a[0] = a[1]

我愿意,[a[0],a[2]]所以没有a[1]a[1] is a[0]

标签: pythonlistpointers

解决方案


当您复制这样的列表时,重复项将具有相同的内存地址,因此您可以利用它。

import ctypes

a = [[1],[0],[3]]
a[1] = a[0]

print(a)  # this will print 1,1,3

a = [ctypes.cast(address, ctypes.py_object).value for address in set([id(sub_list) for sub_list in a])]

print(a)  # this will print 1,3

通过使用set函数,您可以摆脱重复的指针,然后您只需将其从地址转换回列表。如果您不使用a[i] = a[j].


推荐阅读