作者:@Cobub | 来源:互联网 | 2022-12-09 23:34
1> Rakesh..:
使用set
删除重复.
例如:
lst = [[1, 200], [2, 100], [4, 50], [5, 40], [8, 25], [10, 20], [20, 10], [25, 8], [40, 5], [50, 4], [100, 2], [200, 1]]
lst = set([tuple(sorted(i)) for i in lst]) #Sort inner list and then use set
lst = list(map(list, lst)) #Converting back to list
print(lst)
输出:
[[8, 25], [4, 50], [1, 200], [10, 20], [2, 100], [5, 40]]
我不确定你是什么意思?
2> Håken Lid..:
如果输入较大,则使用集合而不是列表将具有显着的性能优势。
>>> unique = set(map(frozenset, pairs))
>>> unique
{frozenset({1, 200}),
frozenset({10, 20}),
frozenset({5, 40}),
frozenset({2, 100}),
frozenset({8, 25}),
frozenset({4, 50})}
内部集合必须是frozenset
因为常规集合是可变的,并且集合只能包含不可变的子代。
转换回列表列表。
>>> list(map(list, unique))
[[200, 1], [10, 20], [40, 5], [2, 100], [8, 25], [50, 4]]
集是可迭代的,因此根据您的用法,可能不需要此步骤。
这是一个同时执行两个步骤并将结果作为嵌套列表返回的函数。
def unique_pairs(pairs):
return list(map(list,set(map(frozenset, pairs))))
请注意,将列表转换为集合会将包含相同对(例如[20,20]
)的列表转换为单个元素集({20}
)。因此,如果您的输入可以包含相同的对,则可能需要执行额外的最后一步,将单例扩展回对。
def unique_pairs(pairs):
return [(2*[*p])[:2] for p in set(map(frozenset,pairs))]
这将适用于双胞胎对和混合对。
>>> pairs = [[10, 2], [2, 10], [10, 10], [2, 2]]
>>> unique_pairs(pairs)
[[10, 10], [2, 2], [10, 2]]