【问题标题】:find unique value from python list [duplicate]从python列表中查找唯一值[重复]
【发布时间】:2015-10-16 13:11:57
【问题描述】:

如何找到列表列表的唯一项?

在以下示例中,我预计只有 2 个项目。

mylist=[[' Dish Towel .\n', '1.000', '149.000'],
 [' Dish Towel .\n', '1.000', '149.000'],
 [' Kitchentowel(mix designs) .\n', '1.000', '99.000'],
 [' Kitchentowel(mix designs) .\n', '1.000', '99.000']]

预期结果:

newlist=[[' Dish Towel .\n', '1.000', '149.000'],
 [' Kitchentowel(mix designs) .\n', '1.000', '99.000']]

我试过了,但我得到了 TypeError。

  output = set()
  for x in mylist:
       output.add(x)
  print output

【问题讨论】:

  • output.add(tuple(x))?列表是可变的,不能存储在集合中。
  • 有点跑题了:在我看来,那些内部列表最好用字典建模。

标签: python


【解决方案1】:

您可以使用set 来保留独特的项目:

>>> set(map(tuple,mylist))
set([(' Kitchentowel(mix designs) .\n', '1.000', '99.000'), (' Dish Towel .\n', '1.000', '149.000')]) 

请注意,由于set 只接受可散列对象,您需要将列表转换为元组,然后使用set

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    output = []
    for x in mylist:
        if x not in output:
            output.append(x)
    print output
    

    【讨论】:

    • 这可行,但在最坏情况下运行 O(n^2) 时间,因此对于特别大的列表可能不是优选的。
    • 最坏情况应该只有 O(n),因为只有一个循环。
    • O(n) 用于循环,O(n) 用于in 操作,组合形成 O(n^2)
    • 你的权利我忘了。我认为这可能很有用,因为它会使输出保持与输入相同的格式,而不是一组元组,但你是对的,它可能有点慢。
    • 是的,保留原始类型可能是一个优势。以及保持项目的原始顺序,这对 OP 可能重要也可能不重要。
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 2019-04-22
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2023-02-19
    • 1970-01-01
    相关资源
    最近更新 更多