你能告诉我为什么strip()函数不起作用吗?
str1= 'aaaadfffdswefoijeowji'
def char_freq():
for x in range (0, len(str1)):
sub = str1[x]
print 'the letter',str1[x],'appearence in the sentence=', str1.count(sub, 0,len(str1))
str1.strip(str1[x])
def main():
char_freq()
main()
答案 0 :(得分:7)
.strip()
工作正常,但字符串是不可变的。 str.strip()
返回新的已删除字符串:
>>> str1 = 'foofoof'
>>> str1.strip('f')
'oofoo'
>>> str1
'foofoof'
您忽略了返回值。但是,如果确实存储了更改的字符串,则for
循环将运行到IndexError
,因为下一次迭代时字符串会更短:
>>> for x in range (0, len(str1)):
... str1 = str1.strip(str1[x])
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: string index out of range
要计算字符串,不要str.strip()
;只是从字符串的开头和结尾删除字符,而不是在中间。您可以使用str.replace(character, '')
,但效率也会很低;但与while
循环相结合可以避免看起来像IndexError
的问题:
while str1:
c = str1[0]
print 'the letter {} appearence in the sentence={}'.format(c, str1.count(c))
str1 = str1.replace(c, '')
更容易使用collections.Counter()
object:
from collections import Counter
freq = Counter(str1)
for character, count in freq.most_common():
print '{} appears {} times'.format(character, count)
如果没有专用的Counter
对象,您可以使用字典来计算字符数:
freq = {}
for c in str1:
if c not in freq:
freq[c] = 0
freq[c] += 1
for character, count in freq.items():
print '{} appears {} times'.format(character, count)
其中freq
然后在循环后保存字符计数。