ano*_*non 5 python list-comprehension list unordered python-3.x
下面的列表有一些重复的子列表,元素的顺序不同:
l1 = [
['The', 'quick', 'brown', 'fox'],
['hi', 'there'],
['jumps', 'over', 'the', 'lazy', 'dog'],
['there', 'hi'],
['jumps', 'dog', 'over','lazy', 'the'],
]
Run Code Online (Sandbox Code Playgroud)
如何删除重复项,保留看到的第一个实例,以获得:
l1 = [
['The', 'quick', 'brown', 'fox'],
['hi', 'there'],
['jumps', 'over', 'the', 'lazy', 'dog'],
]
Run Code Online (Sandbox Code Playgroud)
我试过了:
[list(i) for i in set(map(tuple, l1))]
Run Code Online (Sandbox Code Playgroud)
尽管如此,我不知道这是否是大型列表的最快方法,而且我的尝试没有按预期工作。知道如何有效地删除它们吗?
这个有点棘手。您想从冻结的计数器中键入一个 dict,但计数器在 Python 中不可散列。对于渐近复杂性的小幅下降,您可以使用排序元组作为冻结计数器的替代品:
seen = set()
result = []
for x in l1:
key = tuple(sorted(x))
if key not in seen:
result.append(x)
seen.add(key)
Run Code Online (Sandbox Code Playgroud)
单行中的相同想法如下所示:
[*{tuple(sorted(k)): k for k in reversed(l1)}.values()][::-1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |