Python - 独特的列表

时间:2013-12-15 22:47:40

标签: python list set unique

我有一份清单清单。我想基于前三个元素获得所有唯一列表。如果有重复项,那么它应该只返回最后一项。例如,基于此

[['one', 'two', 'three', 'teennn'], ['five', 'five', 'five', 'five'],
 ['seven', 'nine', 'ten', 'eleven'], ['one', 'two', 'three', 'four']]

我想退回

[['five', 'five', 'five', 'five'],
 ['seven', 'nine', 'ten', 'eleven'], ['one', 'two', 'three', 'four']]

2 个答案:

答案 0 :(得分:6)

lst = [['one', 'two', 'three', 'teennn'], 
       ['five', 'five', 'five', 'five'], 
       ['seven', 'nine', 'ten', 'eleven'], 
       ['one', 'two', 'three', 'four']]
output = []
seen = set()
lst.reverse()
for item in lst:
    if not item[:3] in seen:
        output.append(item)
        seen.add(item[:3])
output.reverse()

这可确保前三项始终是唯一的。从列表lst的末尾开始,使用reverse确保包含每个起始集的最后一次出现。

答案 1 :(得分:3)

如果订单不重要,那么您可以使用dict

data = [['one', 'two', 'three', 'teennn'], ['five', 'five', 'five', 'five'], ['seven', 'nine', 'ten', 'eleven'], ['one', 'two', 'three', 'four']]
new = {tuple(el[:3]): el for el in data}.values()
# [['one', 'two', 'three', 'four'], ['seven', 'nine', 'ten', 'eleven'], ['five', 'five', 'five', 'five']]

或者,如果你真的想维持秩序,那么就像:

new = [data[idx] for idx in sorted({tuple(el[:3]): idx for idx, el in enumerate(data)}.values())]