从列表

时间:2015-10-29 00:15:22

标签: python sorting duplicates logic nested-lists

我有一个主List,用于存储可以随时添加到主List的不同列表。我遇到的问题是从主列表中的列表中删除相同的值。例如:

初始列表清单:

[[('not', ('box', 'p')), ('diamond', 'p'), ('box', 'q'), ('diamond', 'q'),
  ('diamond', 'r')], [('not', 'p'), 'q'], ['p', 'q'], ['q', 'q'],
 ['r', 'q']]

期望的回报:

[[('not', ('box', 'p')), ('diamond', 'p'), ('box', 'q'), ('diamond', 'q'),
  ('diamond', 'r')], [('not', 'p'), 'q'], ['p', 'q'], ['q'], ['r', 'q']]

第二个例子

初始

[[('not', ('box', 'p')), ('diamond', 'p'), ('box', 'q'), ('diamond', 'q'),
  ('diamond', 'q')], [('not', 'p'), 'q'], ['p', 'q'], ['q', 'q'],
 [('not', r'), 'q']]

返回

[[('not', ('box', 'p')), ('diamond', 'p'), ('box', 'q'), ('diamond', 'q')],
 [('not', 'p'), 'q'], ['p', 'q'], ['q'], [('not', r'), 'q']]

重要的是,订单必须相同,并且只有主列表中的列表不需要重复。我已经看到很多关于堆栈溢出的建议,但它们都不起作用,因为逐个元素检查会让我自己留下'diamond'或'box'值。事实上,我需要完全添加('diamond','q')元组。这个问题与类似问题不同,因为我想在主列表中对单个列表进行排序。

2 个答案:

答案 0 :(得分:6)

from collections import OrderedDict

init_list = [[('not', ('box', 'p')), ('diamond', 'p'), ('box', 'q'), ('diamond', 'q'), ('diamond', 'q')], [('not', 'p'), 'q'], ['p', 'q'], ['q', 'q'], [('not', 'r'), 'q']]

uniq_list = [list(OrderedDict.fromkeys(l)) for l in init_list]

OrderedDict允许您创建一个有序集,因为OrderedDict.fromkeys(l)返回一个字典,其中l的密钥保留了它们的顺序(并消除了重复)。 list(OrderedDict)只是将dict的密钥作为list返回。

答案 1 :(得分:0)

您可以OrderedSet使用init_list = # your list of lists uniq_list = [list(OrderedSet(l)) for l in init_list] ,然后使用

RecyclerView