【问题标题】:Python - Unique Lists [closed]Python - 唯一列表 [关闭]
【发布时间】:2013-12-15 22:47:40
【问题描述】:

我有一个列表列表。我想仅基于前三个元素获取所有唯一列表。如果有重复项,那么它应该只返回最后一项。所以例如基于这个

[['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']]

【问题讨论】:

  • 您能否更好地解释您的目标或提供您拥有的代码?

标签: python list set unique


【解决方案1】:
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,确保包含每个起始集的最后一次出现。

【讨论】:

  • 假设内存不是问题,值得使用set 来跟踪看到的元组,从而将时间复杂度从 O(n^2) 降低到 O(n)。
  • 好建议,谢谢
【解决方案2】:

如果顺序不重要,那么您可以使用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())]

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2016-01-12
    • 2011-04-13
    • 2020-04-13
    相关资源
    最近更新 更多