计算队列中的不同值
Count distinct values in a queue
我正在尝试实现计算队列中不同值数量的方法。
例如,如果队列看起来像这样:[1, 2, 2, 4, 4, 4, 8, 8, 10],那么方法应该 return 5.
所以我创建了这样的函数:
def count_distinct(self) -> int:
# Test case
Q = [0, 1, 1, 2, 3, 4, 5, 5, 7, 7, 9, 9, 9, 11, 11]
if Q.is_empty():
return 0
count = 1
current = Q.dequeue()
while (Q.is_empty() is False):
next = Q.dequeue()
if current != next:
count += 1
current = next
return count
但是,结果很奇怪。
预期结果:9
我的结果:15
有人知道问题出在哪里吗?谢谢
使用 itertools 中的 Counter
:
from collections import Counter
l = [1, 2, 2, 4, 4, 4, 8, 8, 10]
c = Counter(l)
>>> len(c)
5
对于您的测试用例:
>>> len(Counter(Q))
9
出于好奇
为什么不使用 set
来获取长度? Set 仅包含唯一值,您似乎并不关心这些值出现的任何特定顺序。
>>> len(set(Q))
9
你可以简单地先排序然后统计数字,除非它与之前的不一样。
a = [1, 2, 2, 4, 4, 4, 8, 8, 10]
a = sorted(a)
last = a[0]
count = 1
for i in range(1, len(a)):
if a[i] == last:
continue
last = a[i]
count += 1
print(count)
在您的情况下,我们假设您的代码是 运行 并且您自定义了所有这些额外的方法(出队等)。在这种情况下,最有可能的原因是您的列表变得未排序,因为您创建它。
队列是否像pythonqueue.Queue?
如果 Queue 是 有序的,你的函数看起来是正确的。
import queue
def count_distinct() -> int:
# Test case
Q = queue.Queue()
for x in [0, 1, 1, 2, 3, 4, 5, 5, 7, 7, 9, 9, 9, 11, 11]:
Q.put(x)
if Q.empty():
return 0
count = 1
current = Q.get()
while (Q.empty() is False):
next = Q.get()
if current != next:
count += 1
current = next
return count
它return9.
我正在尝试实现计算队列中不同值数量的方法。 例如,如果队列看起来像这样:[1, 2, 2, 4, 4, 4, 8, 8, 10],那么方法应该 return 5.
所以我创建了这样的函数:
def count_distinct(self) -> int:
# Test case
Q = [0, 1, 1, 2, 3, 4, 5, 5, 7, 7, 9, 9, 9, 11, 11]
if Q.is_empty():
return 0
count = 1
current = Q.dequeue()
while (Q.is_empty() is False):
next = Q.dequeue()
if current != next:
count += 1
current = next
return count
但是,结果很奇怪。
预期结果:9
我的结果:15
有人知道问题出在哪里吗?谢谢
使用 itertools 中的 Counter
:
from collections import Counter
l = [1, 2, 2, 4, 4, 4, 8, 8, 10]
c = Counter(l)
>>> len(c)
5
对于您的测试用例:
>>> len(Counter(Q))
9
出于好奇
为什么不使用 set
来获取长度? Set 仅包含唯一值,您似乎并不关心这些值出现的任何特定顺序。
>>> len(set(Q))
9
你可以简单地先排序然后统计数字,除非它与之前的不一样。
a = [1, 2, 2, 4, 4, 4, 8, 8, 10]
a = sorted(a)
last = a[0]
count = 1
for i in range(1, len(a)):
if a[i] == last:
continue
last = a[i]
count += 1
print(count)
在您的情况下,我们假设您的代码是 运行 并且您自定义了所有这些额外的方法(出队等)。在这种情况下,最有可能的原因是您的列表变得未排序,因为您创建它。
队列是否像pythonqueue.Queue?
如果 Queue 是 有序的,你的函数看起来是正确的。
import queue
def count_distinct() -> int:
# Test case
Q = queue.Queue()
for x in [0, 1, 1, 2, 3, 4, 5, 5, 7, 7, 9, 9, 9, 11, 11]:
Q.put(x)
if Q.empty():
return 0
count = 1
current = Q.get()
while (Q.empty() is False):
next = Q.get()
if current != next:
count += 1
current = next
return count
它return9.