当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中迭代字符串?

如何解决《如何在Python中迭代字符串?》经验,为你挑选了3个好方法。



1> Glyph..:

你问的问题(如何迭代字母表)与你试图解决的问题(如何计算字符串中字母的频率)不是同一个问题.

你可以使用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!")


你真的应该使用string.ascii_lowercase而不是编写自己的getAllTheLetters.另外,这是一个功能非常单一的名称!

2> Matthew Trev..:

问题是如何使allTheLetters等于所说的字母没有像allTheLetters ="abcdefg ... xyz"之类的东西

这实际上是由字符串模块提供的,它不像你必须自己手动输入;)

import string

allTheLetters = string.ascii_lowercase

def alphCount(text):
  lowerText = text.lower()
  for letter in allTheLetters:  
    print letter + ":", lowertext.count(letter)


但是,具体问题得到了回答.其他问题是原始海报问题.

3> Adam Pierce..:

如果您只想进行字符串的频率计数,请尝试以下方法:

s = 'hi there'
f = {}

for c in s:
        f[c] = f.get(c, 0) + 1

print f

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有