【问题标题】:Count number of distinct items in a list without using a hash table [duplicate]在不使用哈希表的情况下计算列表中不同项目的数量[重复]
【发布时间】:2015-06-02 05:38:24
【问题描述】:

假设我有一个列表(不一定排序):

lst = [1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 10]

我需要一个返回列表中唯一元素计数的函数,在本例中为 10

我不允许使用dictset

我想过做类似的事情:

num = len(lst)
for e in lst:
    for i in lst:
        if e == i:
           num -= 1

但显然,它不起作用。谢谢!

【问题讨论】:

  • 哪道题和这道题一样?
  • 你能提供你期望的输出吗?
  • 我期待 10,但我不能使用 set。它必须使用 == 而没有别的。这就是问题所在。
  • 所以您需要计算唯一值的数量并且您知道列表已排序?
  • 排序与否无关。

标签: python list distinct


【解决方案1】:

试试这个:

任何对列表执行双重嵌套循环的解决方案都在O(n^2) 时间运行,以下在O(n log(n)) 时间运行。虽然可能有一种方法可以在不使用哈希表的情况下提供O(n) 时间解决方案,但我没有看到。

def count_number_unique(my_list):
    prev = None
    unique_count = 0
    for ele in sorted(my_list):
        if ele != prev:
            unique_count += 1
        prev = ele
    return unique_count

结果:

In [20]: lst = [1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 10]

In [21]: count_number_unique(lst)
Out[21]: 10

In [22]: count_number_unique([1,2,1,9,1,2])
Out[22]: 3

【讨论】:

  • This function should return: 10
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2016-06-02
  • 2013-01-28
  • 2016-07-27
  • 2019-02-04
  • 2014-10-02
相关资源
最近更新 更多