[英]Count the number of occurrences of a given item in a (sorted) list?
我被要求创建一种方法,该方法返回列表中给定项目的出现次数。 我知道如何编写代码来查找特定项目,但是如何将其编码到计算随机项目出现次数的位置。
例如,如果我有一个list [4, 6 4, 3, 6, 4, 9]
并且我输入类似
s1.count(4)
,它应该return 3
或s1.count(6)
应该return 2
。
我不允许使用和内置函数。
在最近的一次作业中,我被要求计算sub string
“ ou”出现在给定字符串中的出现次数,并对其进行了编码
if len(astr) < 2:
return 0
else:
return (astr[:2] == "ou")+ count_pattern(astr[1:])
这样的工作会吗?
def count(self, item):
num=0
for i in self.s_list:
if i in self.s_list:
num[i] +=1
def __str__(self):
return str(self.s_list)
如果此列表已经排序,则按照Big-O的“最有效”的方法将是执行二进制搜索,如果找到该值,则使用向前计数/向后计数。
但是,对于示例中未排序的列表,唯一计算出现次数的方法是依次遍历每个项目(或首先对它进行排序;-)。 这是一些伪代码,请注意,它比原始文章中介绍的代码更简单 ( if x in list
或count[x]
):
set count to 0
for each element in the list:
if the element is what we are looking for:
add one to count
快乐的编码。
如果我告诉您计算以下列表中的四位数, 您将如何处理?
1 4 2 4 3 8 2 1 4 2 4 9 7 4
您将首先no fours yet
记得no fours yet
,并为等于4的每个元素加1。要遍历列表,可以使用for
语句 。 给定列表el
的元素,您可以检查是否为四个,例如:
if el == 4:
# TODO: Add 1 to the counter here
回应您的编辑:
您目前正在测试if i in self.s_list:
,这没有任何意义,因为i
是列表的元素,因此始终存在于列表中。
将数字相加时,只需编写num += 1
。 仅当您要访问列表或字典的值时,才需要使用方括号。
另外,不要忘了在函数末尾return num
,以便有人调用它返回结果。
实际上,就Big-O而言,最有效的方法是O(log n)。 @pst的方法将导致O(log n + s),如果数组由相等的元素组成,则O(log n + s)可能变为线性。
实现O(log n)的方法是使用2个二进制搜索(给出O(2log n),但是我们丢弃常量,因此仍然是O(log n))被修改为没有相等性测试,因此,所有搜索都将失败。 但是,如果搜索失败(低>高),则返回低。
在第一个搜索中,如果中间值大于您的搜索词,则递归到数组的较高部分,否则递归到较低的部分。 在第二个搜索中,反转二进制比较。
第一次搜索产生等元素的右边界,第二次搜索产生左边界。 只需减去就可以得出事件的数量。 基于Skiena中描述的算法。
无论如何,这似乎是一项作业。 尝试list.count(item)
。 那应该做的。
这里的第三个或第四个元素:
http://docs.python.org/tutorial/datastructures.html
编辑:
尝试其他类似的东西:
bukket = dict()
for elem in astr:
if elem not in bukket.keys():
bukket[elem] = 1
else:
bukket[elem] += 1
现在,您可以使用dict.keys()作为列表获取列表中的所有元素,并使用dict [key]获得相应的出现次数。
因此,您可以对其进行测试:
import random
l = []
for i in range(0,200):
l.append(random.randint(0,20))
print l
l.sort()
print l
bukket = dict()
for elem in l:
if elem not in bukket.keys():
bukket[elem] = 1
else:
bukket[elem] += 1
print bukket
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.