出现在两个字符串数我需要帮助写一个定义的两个字符串参数出现次数的函数。该函数返回第二个参数中出现第一个参数的字符的次数。使用for循环
实施例:occurances( '上当', '世界你好')应该评估至7(1 'E',3 '1',2 'O',1 'd')
需要结合一个'for循环'。
感谢大家的帮助,非常感谢!
出现在两个字符串数我需要帮助写一个定义的两个字符串参数出现次数的函数。该函数返回第二个参数中出现第一个参数的字符的次数。使用for循环
实施例:occurances( '上当', '世界你好')应该评估至7(1 'E',3 '1',2 'O',1 'd')
需要结合一个'for循环'。
感谢大家的帮助,非常感谢!
列表解析的方法:
In [738]: def occurances(fst, sec):
...: return sum(sec.count(c) for c in set(fst))
In [739]: occurances('fooled','hello world')
Out[739]: 7
使它到一个for循环:
def occurances(fst, sec):
osum=0
for c in set(fst):
#try it yourself :)
return osum
或者作为@SvenMarnach和@JayanthKoushik提到的,如果不使用set
:
In [738]: def occurances(fst, sec):
...: return sum(c in fst for c in sec)
这也与O(MN)在时间(米运行中,n为fst
长度和sec
)。您可以通过fst
一个set
使其O(M + N):
In [738]: def occurances(fst, sec):
...: fst=set(fst)
...: return sum(c in fst for c in sec) #checking "in set" is O(1)
理解不需要使用设置。你可以只是做:LEN([C为秒c。如果下在FST]) –
也不需要为一组,如果您的解决方案是O(MN)反正。只要'总和(c in fst for c in sec)'就可以了。尽管在这之前执行'fst = set(fst)',你可以使用一个集合来减少时间复杂度为O(m + n)。 –
@SvenMarnach不会使用设置的原因**多个**输出?像这样:'(1'e',1'e'....)'? – Guy
只需使用一个defaultdict
和计数的出现,如果第一个元素出现在第二位。再总结所有的值:
from collections import defaultdict
ele_count = defaultdict(int)
def occurances(first, second):
count = 0
for ele in second:
if ele in first:
ele_count[ele] += 1
for item in ele_count.values():
count += item
print count
你尝试过什么?看起来这是作业,请显示你被困住的代码。 – msvalkon
@ user3374113如果您在编辑问题时尝试编辑,人们会更容易接受。 – Guy
对于[参考](http://meta.stackexchange.com/questions/223856/questions-on-so-asking-us-to-code) – Guy