如何在Python中遍历字符串?

发布于 2021-01-29 15:10:44

例如,假设我想列出一个字符串中每个字母的频率。最简单的方法是什么?

这是我在想的一个例子…问题是如何使allTheLetters等于所说的字母,而没有allTheLetters =“ abcdefg …
xyz”之类的东西。在许多其他语言中,我可以只做字母+ +来增加字母的顺序,但是到目前为止,我还没有找到在python中做到这一点的方法。

def alphCount(text):
  lowerText = text.lower()
  for letter in allTheLetters:  
    print letter + ":", lowertext.count(letter)
关注者
0
被浏览
89
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您所问的问题(如何遍历字母)与您要解决的问题(如何计算字符串中字母的频率)不是同一问题。

    您可以使用string.lowercase,如其他张贴者所建议的:

    import string
    allTheLetters = string.lowercase
    

    要以“习惯”的方式进行处理,将字母视为数字,可以使用“ ord”和“ chr”功能。绝对没有理由完全做到这一点,但也许它更接近于您实际试图找出的结果:

    def getAllTheLetters(begin='a', end='z'):
        beginNum = ord(begin)
        endNum = ord(end)
        for number in xrange(beginNum, endNum+1):
            yield chr(number)
    

    您可以说它做对了,因为此代码显示True

    import string
    print ''.join(getAllTheLetters()) == string.lowercase
    

    但是,要解决您实际上要解决的问题,您想使用字典并随身收集字母:

    from collections import defaultdict    
    def letterOccurrances(string):
        frequencies = defaultdict(lambda: 0)
        for character in string:
            frequencies[character.lower()] += 1
        return frequencies
    

    像这样使用:

    occs = letterOccurrances("Hello, world!")
    print occs['l']
    print occs['h']
    

    这将分别打印“ 3”和“ 1”。

    请注意,这也适用于unicode:

    # -*- coding: utf-8 -*-
    occs = letterOccurrances(u"héĺĺó, ẃóŕĺd!")
    print occs[u'l']
    print occs[u'ĺ']
    

    如果您要尝试使用unicode的另一种方法(增加每个字符),您将需要等待很长时间。有数百万个unicode字符。

    要实现以下原始功能(按字母顺序打印每个字母的计数):

    def alphCount(text):
        for character, count in sorted(letterOccurrances(text).iteritems()):
            print "%s: %s" % (character, count)
    
    alphCount("hello, world!")
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看