如何有效地使用strip()函数

时间:2014-02-01 12:41:24

标签: python

你能告诉我为什么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()

1 个答案:

答案 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然后在循环后保存字符计数。