[英]Removing repeated sub-lists from a list
我的清单如下:
l = [['A', 'C', 'D'], ['B', 'E'], ['A', 'C', 'D'], ['A', 'C', 'D'], ['B', 'E'], ['F']]
结果应为:
[['A', 'C', 'D'], ['B', 'E'], ['F']]
元素的顺序也不重要。
我尝试为:
print list(set(l))
numpy有更好的方法吗
列表不是“可哈希”类型,不能是集合的成员。
冻结的集合可以,因此我们首先转换为那些集合(也使子列表具有顺序指示性),然后再转换回列表。
print map(list, set(map(frozenset, l)))
或者,如果您更喜欢理解,
print [list(x) for x in {frozenset(x) for x in l}]
我怀疑numpy提供了任何“更好”(为了更好的定义)方式。
这种方式是IMO最清晰,最Python的。
原因列表之所以不能成为集合的一部分是因为它们是可变的,因此散列现在与更改后的散列不同。 处于基于哈希的集合中会使行为混乱。
#!/usr/bin/python
l1 = [['A', 'C', 'D'], ['B', 'E'], ['A', 'C', 'D'], ['A', 'C', 'D'], ['B', 'E'], ['F']]
l2=[]
for l in l1:
if l not in l2:
l2.append(l)
print l2
输出值
[['A', 'C', 'D'], ['B', 'E'], ['F']]
无需将非可哈希类型转换为可哈希类型,反之亦然(这会对性能产生影响)的最简单直接的方法是使用itertools.groupby
偏离航线,将不会保留订单,但是无论如何OP都会明确指出这不是严格的要求
>>> l = [['A', 'C', 'D'], ['B', 'E'], ['A', 'C', 'D'], ['A', 'C', 'D'], ['B', 'E'], ['F']]
>>> from itertools import groupby
>>> [k for k, g in groupby(sorted(l))]
[['A', 'C', 'D'], ['B', 'E'], ['F']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.