在某种程度上,我使用python3中的字符串库来解决HarvardX挑战,但我不认为我的解决方案很好。你能想出更简洁的解决办法吗?在
我的代码是:
#writing the 2 strings
alpha = string.ascii_letters
alpha
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
sent = 'She sells seashells on the seashore the seashells she sells are seashells for sure'
sent
'She sells seashells on the seashore the seashells she sells are seashells for sure'
#WRITING DICT to lookup count alpha string characters within 'She sells(etc)'
mydict_countalpha = {alpha[0]:sent.count(alpha[0]), alpha[1]:sent.count(alpha[1]), alpha[2]:sent.count(alpha[2]), alpha[3]:sent.count(alpha[3]), alpha[4]:sent.count(alpha[4]), alpha[5]:sent.count(alpha[5])}
#result:
mydict_countalpha
{'a': 5, 'b': 0, 'c': 0, 'd': 0, 'e': 16, 'f': 1}
是啊。它计算正确。在
alpha字符串的长度52个字符。如果我一行一行地手工写这本词典,我想我会出错的。我怎样才能做得更好?这和迭代有关吗?在
这是基于HarvardX优秀课程“Using Python for Research”的家庭作业。它是经过评估的,但是根据HarvardX的指导,咨询堆栈溢出来确定它是可以的。:—)如果你有什么想法,我不会问你作弊。在
我认为这个挑战有着非常广泛的应用,希望你也觉得有趣。但是,我是一个初学者,对Python的学习曲线非常陡峭。不过,谢谢你的建议!在
最佳
A
简单地查看
sent
中的每个字母并每次递增该字母的计数似乎要容易得多。在或者更简单地说,使用
^{pr2}$dict.setdefault
:但是请注意stdlib模块
collections
有一个名为Counter
的对象,它正是这样做的。在在用
filter
计数之前,可以进一步过滤掉不需要的字母python方法是通过字典理解使用}的过滤键。为了提高效率,可以先将
collections.Counter
和{ascii_letters
转换为set
:此解决方案具有O(m+n)复杂性,而您当前的解决方案具有复杂度O(m*n)。通过理解
str.count
,就像list.count
,具有O(n)复杂度,也就是说,字典理解中的每次迭代都需要对字符串进行完整的解析。在你可以用听写理解
但没有必要一直查指数。直接循环
^{pr2}$alpha
不过,我通常的做法是使用集合。计数器在
编辑:为循环版本添加
相关问题 更多 >
编程相关推荐