我想计算每个字符在字符串中重复的次数。除了比较A-Z中字符串的每个字符外,还有什么特别的方法吗? 并递增一个计数器?
更新(参考Anthony's answer):无论你建议到现在为止,我都要写26次。有更简单的方法吗?
答案 0 :(得分:106)
import collections
d = collections.defaultdict(int)
for c in thestring:
d[c] += 1
collections.defaultdict
就像dict
(实际上是它的子类),但是当找到一个条目而没有找到它时,它会生成它并插入它而不是报告它通过调用提供的0参数可调用。最受欢迎的是defaultdict(int)
,用于计数(或者,等效地,用于制作多重编辑AKA包数据结构)和defaultdict(list)
,它永远不需要使用.setdefault(akey, []).append(avalue)
和类似的笨拙成语。
所以一旦你完成了这个d
是一个类似于字典的容器,它将每个角色映射到它出现的次数,当然你可以以任何你喜欢的方式发出它。例如,最受欢迎的角色首先:
for c in sorted(d, key=d.get, reverse=True):
print '%s %6d' % (c, d[c])
答案 1 :(得分:32)
我的第一个想法是这样做:
chars = "abcdefghijklmnopqrstuvwxyz"
check_string = "i am checking this string to see how many times each character appears"
for char in chars:
count = check_string.count(char)
if count > 1:
print char, count
然而,这不是一个好主意!这将扫描字符串26次,因此您可能会比其他一些答案多做26倍的工作。你真的应该这样做:
count = {}
for s in check_string:
if count.has_key(s):
count[s] += 1
else:
count[s] = 1
for key in count:
if count[key] > 1:
print key, count[key]
这可确保您只通过字符串一次,而不是26次。
另外,Alex的回答很棒 - 我对收藏模块并不熟悉。我将来会用它。他的答案比我的更简洁,技术更优越。我建议使用他的代码。
答案 2 :(得分:31)
Python 2.7+包含collections.Counter类:
import collections
results = collections.Counter(the_string)
print(results)
答案 3 :(得分:13)
这是我可以提出的最短,最实用的,无需导入额外的模块。
text = "hello cruel world. This is a sample text"
d = dict.fromkeys(text, 0)
for c in text: d[c] += 1
print d ['a']将输出2
它也很快。
答案 4 :(得分:3)
您想使用dict。
#!/usr/bin/env python
input = "this is a string"
d = {}
for c in input:
try:
d[c] += 1
except:
d[c] = 1
for k in d.keys():
print "%s: %d" % (k, d[k])
答案 5 :(得分:3)
如果有人在没有collections
模块的情况下寻找最简单的方法。我想这会有所帮助:
>>> s = "asldaksldkalskdla"
>>> {i:s.count(i) for i in set(s)}
{'a': 4, 'd': 3, 'k': 3, 's': 3, 'l': 4}
或
>>> [(i,s.count(i)) for i in set(s)]
[('a', 4), ('k', 3), ('s', 3), ('l', 4), ('d', 3)]
答案 6 :(得分:2)
您可以使用字典:
s = "asldaksldkalskdla"
dict = {}
for letter in s:
if letter not in dict.keys():
dict[letter] = 1
else:
dict[letter] += 1
print dict
答案 7 :(得分:2)
如果我回答一些愚蠢的话,我可以算一下我在双手上认识Python的天数,请原谅我。)
我没有使用dict,而是想为什么不使用列表呢?我不确定如何在Python中实现列表和字典,因此必须对其进行测量以了解更快的内容。
如果这是C ++,我会使用普通的c-array / vector进行持续时间访问(肯定会更快)但我不知道Python中对应的数据类型是什么(如果有的话......) :
count = [0 for i in range(26)]
for c in ''.join(s.lower().split()): # get rid of whitespaces and capital letters
count[ord(c) - 97] += 1 # ord('a') == 97
也可以制作列表的大小ord('z'),然后在任何地方删除97减法,但如果你优化,为什么不一直:)
编辑: 一位意见提供者建议加入/拆分不值得使用列表,所以我想为什么不摆脱它:
count = [0 for i in range(26)]
for c in s:
if c.isalpha(): count[ord(c.lower()) - 97] += 1
答案 8 :(得分:1)
dict = {}
for i in set(str):
b = str.count(i, 0, len(str))
dict[i] = b
print dict
如果我的字符串是:
str = "this is string!"
以上代码将打印:
{'!': 1, ' ': 2, 'g': 1, 'i': 3, 'h': 1, 'n': 1, 's': 3, 'r': 1, 't': 2}
答案 9 :(得分:1)
这将显示出现次数为
的字符的字典str = 'aabcdefghijklmnopqrstuvwxyz'
mydict = {}
for char in str:
mydict[char]=mydict.get(char,0)+1
print mydict
答案 10 :(得分:1)
inputString = input("Enter a String:")
countedArray = {}
for char in inputString:
if char in countedArray:
countedArray[char] += 1
else:
countedArray[char] = 1
print(countedArray)
答案 11 :(得分:0)
这是解决方案..
my_list=[]
history=""
history_count=0
my_str="happppyyyy"
for letter in my_str:
if letter in history:
my_list.remove((history,history_count))
history=letter
history_count+=1
else:
history_count=0
history_count+=1
history=letter
my_list.append((history,history_count))
print my_list
答案 12 :(得分:0)
如果只计算给定字符串中给定字符的重复次数,请尝试这样的事情。
word = "babulibobablingo" letter = 'b' if letter in word: print(word.count(letter))
答案 13 :(得分:0)
s = 'today is sunday i would like to relax'
numberOfDuplicatedChar = len(s) - len(set(s))
#set
中没有重复的元素。
答案 14 :(得分:-1)
下面的代码对我有用,无需查找任何其他Python库。
int padding = 10;
SpannableString spannable = new SpnnableString("...");
spannable.setSpan(
new MyLineBackgroundSpan(ContextCompat.getColor(context, R.color.colorPrimaryDark), padding),
0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setShadowLayer(padding, 0, 0, 0);
textView.setPadding(padding, padding, padding, padding);
textView.setText(spannable);
输出:
def count_repeated_letter(string1):
list1=[]
for letter in string1:
if string1.count(letter)>=2:
if letter not in list1:
list1.append(letter)
for item in list1:
if item!= " ":
print(item,string1.count(item))
count_repeated_letter('letter has 1 e and 2 e and 1 t and two t')
答案 15 :(得分:-1)
要计算字符串中的字符,您必须使用YOUR_VARİABLE.count('WHAT_YOU_WANT_TO_COUNT')
。
如果需要汇总,则必须使用count()函数。
variable = 'turkiye'
print(variable.count('u'))
输出: 1