Recipe 1.1. Processing a String One Character at a Time
Recipe 1.1. 逐个处理字符串中的各个字符
Credit: Luther Blissett
[问题]
您想逐个处理字符串中的各个字符。
[解法]
您可以构建一个列表,其中每个元素存放一个字符串中的字符(由于 Python 中没有用来表示单个“字符”的类型,因此列表的每个元素都是一个长度为1的字符串)。以字符串作为参数,调用内建的 list 即可:
thelist = list(thestring)
您甚至连 list 都不需要构建,因为您可以通过 for 语句,直接对字符串进行循环存取:
for c in thestring:
do_something_with(c)
或者通过 list comprehension 来达到同样的效果:
results = [do_something_with(c) for c in thestring]
您还可以调用内建的 map 函数来达到同样的效果。将要对每个字符所做的处理归纳为函数,然后将字符串以及处理函数作为参数传递给 map 即可:
results = map(do_something, thestring)
[讨论]
Python 中的单个字符用长度为 1 的字符串来表示。您可以通过循环,逐个访问字符串中的每个字符。若您对每个字符的处理可以归纳为函数调用,您也可以使用 map 来完成。您还可以调用内建的 list 来将字符串的各个字符作为列表元素存放到列表当中。若您希望得到的是集合,其中的元素就是字符串的各个字符,您可以利用 sets 模块来完成,将字符串作为参数来构建一个 Set 即可(在 Python 2.4 中您可以调用内建的 set ,用法同旧版本中的 sets 模块):
import sets
magic_chars = sets.Set('abracadabra')
poppins_chars = sets.Set('supercalifragilisticexpialidocious')
print ''.join(magic_chars & poppins_chars) # 求交集
运行结果为:
acrd
[请参见]
Library Reference 中关于 sequences(序列)的章节;Perl Cookbook Recipe 1.5 。