это строка:
a='dqdwqfwqfggqwq'
как узнать количество вхождений каждого персонажа
мой босс сказал мне, что для этого используется только одна строка,
так что я могу сделать,
спасибо
В 2.7 и 3.1 есть инструмент под названием Counter:
>>> import collections >>> results = collections.Counter("dqdwqfwqfggqwq") >>> results Counter({'q': 5, 'w': 3, 'g': 2, 'd': 2, 'f': 2})
Docs . Как указано в комментариях, он не совместим с 2.6 или ниже, но он backported .
Не очень эффективно, но в одну строку ...
In [24]: a='dqdwqfwqfggqwq' In [25]: dict((letter,a.count(letter)) for letter in set(a)) Out[25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
Вы можете сделать это:
listOfCharac={} for s in a: if s in listOfCharac.keys(): listOfCharac[s]+=1 else: listOfCharac[s]=1 print (listOfCharac)
Выход {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
{'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
Этот метод также эффективен и протестирован для python3.
(для дальнейшего использования)
Это сравнение производительности различных подходов может представлять интерес.
однострочный код для нахождения вхождения каждого символа в строке.
для i в set (a): print ('% s count% d'% (i, a.count (i)))
lettercounts = {} for letter in a: lettercounts[letter] = lettercounts.get(letter,0)+1
Для каждой буквы подсчитайте разницу между строкой с этой буквой и без нее, чтобы вы могли получить ее число вхождений
a="fjfdsjmvcxklfmds3232dsfdsm" dict(map(lambda letter:(letter,len(a)-len(a.replace(letter,''))),a))