我要做的是计算每个字母出现在字符串中的次数。我想将细节存储在字典中 以下是我尝试这样做的事情:
def scan(string):
list_string = []
for letter in string:
list_string.append(letter)
list_string.sort()
scanned = {}
for k in range(0,len(list_string)):
count = 0
for kk in range(k,len(list_string)):
if list_string[k] == list_string[kk]:
count += 1
scanned.update({list_string[k]:count})
return scanned
但是,即使有时候字母出现多次,每个键的值都是1。
我尝试这个时工作正常
print("Letter '{}': \t {}.format(list_string[k],count))
有人可以帮忙吗?
答案 0 :(得分:7)
from collections import Counter
letter_count = Counter(mystring)
答案 1 :(得分:7)
您可以使用Counter
:
from collection import Counter
ctr = Counter(list_string)
现在ctr
是Counter
:一种特殊的字典。它将列表中的元素映射到数字(它在列表中的时间量)。未见过的元素映射到0。
这是因为每次重新计算该值时,都会覆盖。
说清单是:
['a','b','a','a']
现在,您首先将k
- 光标(^
)设置为第一个元素,将kk
- 光标(v
)设置为相同:
#v
['a','b','a','a']
#^
现在我们计算a
的数量并获得3.然后我们前进,k
- 计数器并计算b
s(1)的数量。现在光标再次移动到第二个a
:
# v
['a','b','a','a']
# ^
现在我们再次计算'a'
的数量,但现在我们得到2:因为kk
- 光标忽略第一个。最后,我们将光标移动到最后'a'
,并计算'a'
的数量,猜猜是什么?我们得到1.所以我们把它重写为1.
# v
['a','b','a','a']
# ^
无论元素出现在列表中的次数如何,我们总是将其计为 last 时间,然后计数显然总是为1.
答案 2 :(得分:1)
letter_count = { x : list(mystring).count(x) for x in set(mystring)}
正如所指出的那样,如果你的元素是可混合的,那么一个漂亮的pythonic单线程具有差的渐近复杂度,在这种情况下使用count(...)将成为线性操作。