第七章:字符串

7.1复合数据类型

目前为止我们遇见过三种数据类型:int,float,以及string,string和其他两种类型不一样,它是由多个字符组成。

包含其他小片数据的数据类型称之为组合数据类型。

中括号操作符从字符串中获取单独一个字符

>>> fruit = "banana"

>>> letter = fruit[1]

letter从fruit中获取第二个字符为a,下标是从0开始。

7.2长度

函数len返回字符串的长度

>>> fruit = "banana"
 
>>> len(fruit)
 
6

下标的值超过字符串长度会报字符串指针越界的错误。我们也可以使用负值从逆向获取字符串中的字符

fruit[-1]获取最后一个字符,fruit[-2]获取倒数第二个字符。

7.3遍历,for循环

很多操作需要每次处理字符串中的一个字符,通常从头开始,依次直到最后一个字符,这种行为称之为遍历,一种实现方式就是while语句:

index = 0
 
while index < len(fruit):
 
    letter = fruit[index]
 
    print letter
 
    index = index + 1

这个循环遍历字符串并打印每个字符,循环的条件是index < len(fruit),因此当index等于字符串长度的时候,条件为false,方法体重的代码不会被执行,最后一个字符是下标为len(fruit-1)的值。

python提供了另外一种方式:

for char in fruit:
 
    print char

7.4字符串分隔

选择某个分片和选择某个字符类似

>>> s = "Peter, Paul, and Mary"
 
>>> print s[0:5]
 
Peter
 
>>> print s[7:11]
 
Paul
 
>>> print s[17:21]
 
Mary

操作符[n:m]从第n个字符到第m个字符,包括第n个字符,但是不包括第m个字符。如果不写第一个字符代表从第一个字符开始截取,如果不写最后一个字符表示从截至至最后一个字符。

>>> fruit = "banana"
 
>>> fruit[:3]
 
'ban'
 
>>> fruit[3:]
 
'ana'

7.5string比较

让我们看看两个相等字符串的比较:

if word == "banana":
 
    print "Yes, we have no bananas!"

7.6string是不可变的

如果试图通过[]操作符改变字符串的值会抛出异常

greeting = "Hello, world!"
 
greeting[0] = 'J' # ERROR!
 
print greeting

字符串是不可变的,意味着你不能改变一个已经存在的字符串的值,替代的办法是基于老的字符串创建一个新的字符串。

7.7find函数

def find(str, ch):
 
    index = 0
 
    while index < len(str):
 
        if str[index] == ch:
 
            return index
 
        index = index + 1
 
    return -1

find同[]操作符相反,[]通过下标索引找到对应的字符,find通过字符找到字符所处的位置,如果没有找到返回-1。如果找到字符串退出循环并返回。

7.8循环计数

下面的程序计算一个字符在字符串中出现的次数。

fruit = "banana"
 
count = 0
 
for char in fruit:
 
    if char == 'a':
 
        count = count+1
 
print(count)

这个程序展示了另外一种称之为计数器的模式,变量count被初始化为0,然后每次递增1,循环结束后count包含了计数结果。