的列表中给出A列出的清单:的Python:独特的名单
L = [[1,2,3], [3,4,5], [1,2,3]]
如何得到一个列表,其中每个列表是独一无二的:
L = [[1,2,3], [3,4,5]]
感谢
的列表中给出A列出的清单:的Python:独特的名单
L = [[1,2,3], [3,4,5], [1,2,3]]
如何得到一个列表,其中每个列表是独一无二的:
L = [[1,2,3], [3,4,5]]
感谢
如果你不”无需关注子列表的顺序:
In [11]: list(map(list, set(map(tuple, L))))
Out[11]: [[3, 4, 5], [1, 2, 3]]
更好的是,你可能应该转而使用一组元组作为你的数据结构。
适应,要保留顺序: 'sort(map(list,set(map(tuple,L))),key = L.index)' – 2013-03-20 17:35:22
@FJ:好戏。 – NPE 2013-03-20 17:35:50
不是最有效的方法,但它很简洁。 – 2013-03-20 17:35:59
有点不知所措,但这怎么样?
[list(el) for el in set(tuple(el) for el in L)]
它的工作原理是因为列表不能相互比较,但元组可以。
unhashable type: 'list'
小心,'list'可以相互比较'[1] == [1]'工作得很好。 'list'不可散列,因为它们是可变对象。 – mgilson 2013-03-20 17:40:43
是的,那是错误的。幸运的是,你可以更多地取决于Python的错误信息 – 2013-03-20 17:44:48
L = [[1,2,3], [3,4,5], [1,2,3]]
newlist = []
for item in L:
if item not in newlist:
newlist.append(item)
这会工作,但可以稍微低效率的时候'L'很大,因为每次有时间通过所有newlist'的'扫描每个'item'在'L' 。 – DSM 2013-03-20 17:39:45
可以转换成元组,然后返回一个列表:如果你想直接让一组从列表的列表错误消息给它了。
L = [[1,2,3], [3,4,5], [1,2,3]]
setL = set(tuple(i) for i in L)
newL = list(list(i) for i in setL)
print newL
[3,4,5],[1,2,3]
你尝试过什么了吗?你如何定义唯一性? '[1,2,3]'是否与'[3,2,1]'相同? – thegrinner 2013-03-20 17:31:17
大多数制作列表的解决方案只包含独特的元素,对于列表清单应该同样适用。 – drewmm 2013-03-20 17:33:00
@thegrinner是的,我已经试过已经和谷歌搜索等一个答案,我找不到任何 – Mermoz 2013-03-20 19:31:13