从列表中获取唯一的项?该列表包含多个子列表。

12

我有一个列表的列表,看起来像这样:

animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse'],['fox','monkey', 'zebra']]

什么是最好的方法来去除重复的列表?使用上面的示例,我正在寻找能够生成以下结果的代码:

uniq_animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse']]

我最初认为可以使用set(),但似乎无法用于列表的列表。我也看到了一个使用itertools的例子,但代码对我来说不是很清晰。谢谢帮助!

3个回答

21
uniq_animal_groups = set(map(tuple, animal_groups))

这会解决问题,尽管你最终得到的是一组元组而不是一组列表。(当然,你可以将其转换回列表的列表,但除非有特定的原因需要这样做,否则为什么要费心呢?)


如果您想访问列表的列表(例如检查uniq_animal_groups[0]),请改用uniq_animal_groups = list(set(map(tuple, animal_groups))) - sachinruk

5

将列表转换为元组,然后就可以将它们放入集合中。

本质上:

uniq_animal_groups = set(map(tuple, animal_groups))

如果您希望结果是一个列表的列表,请尝试以下方法:
uniq_animal_groups = [list(t) for t in set(map(tuple, animal_groups))]

或者:

uniq_animal_groups = map(list, set(map(tuple, animal_groups)))

0

当您不关心内部列表的排序时,首先将所有内容转换为集合:

uniq_animal_groups  = map(list, set(map(tuple, map(set, animal_groups))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接