在Python中遍历字符
有没有办法遍历字符呢?类似于下面这样的:
for c in xrange( 'a', 'z' ):
print c
17 个回答
27
你需要把字符转换成数字,然后再转换回来。
for c in xrange(ord('a'), ord('z')+1):
print chr(c) # resp. print unicode(c)
为了让代码看起来更美观、更容易理解,你可以把这个过程放在一个生成器里:
def character_range(a, b, inclusive=False):
back = chr
if isinstance(a,unicode) or isinstance(b,unicode):
back = unicode
for c in xrange(ord(a), ord(b) + int(bool(inclusive)))
yield back(c)
for c in character_range('a', 'z', inclusive=True):
print(chr(c))
这个生成器可以用 inclusive=False
(默认值)来调用,这样就会像Python通常的行为一样,不包括最后一个元素;或者用 inclusive=True
来调用,这样就会包括最后一个元素。所以在默认情况下 inclusive=False
,如果你输入 'a', 'z'
,它只会返回从 a
到 y
的范围,不包括 z
。
如果 a
或 b
是unicode字符,它会返回unicode格式的结果,否则就会使用 chr
。
目前这个功能(可能)只在Python 2中有效。
109
import string
for char in string.ascii_lowercase:
print char
查看字符串常量可以了解其他的选项,包括大写字母、数字和根据地区不同的字符。如果你想把多个字符集合在一起,可以像这样使用:string.ascii_uppercase + string.ascii_lowercase
,这样就能得到所有这些字符。
137
这是一个自定义生成器的好用法:
Python 3:
def char_range(c1, c2):
"""Generates the characters from `c1` to `c2`, inclusive."""
for c in range(ord(c1), ord(c2)+1):
yield chr(c)
然后:
for c in char_range('a', 'z'):
print(c)
Python 2:
def char_range(c1, c2):
"""Generates the characters from `c1` to `c2`, inclusive."""
for c in xrange(ord(c1), ord(c2)+1):
yield chr(c)
然后:
for c in char_range('a', 'z'):
print c