使用方括号运算符逐一访问每个字符。方括号里的表达式称为索引。
>>> fruit = 'banana'
>>> letter = fruit[1]
在Python中, 索引是从字符串头部算起的一个偏移量, 第一个字母的
偏移量为0。
另一种方法是使用负索引, 从字符串结尾倒过来计算。 表达式fruit[-1]表示最后一个字母, fruit[-2]是倒数第二个字母。
遍历的一种写法是使用while循环:
index = 0
while index < len(fruit):
letter = fruit[index]
print letter
index = index + 1
遍历的另一种写法是用for循环:
for char in fruit:
print char
字符串的一个片段称为切片
>>> s = 'Monty Python'
>>> print s[0:5]
Monty
>>> print s[6:12]
Python
运算符[n:m] 返回字符串从第n到第m之间的字符, 包括第一个字符, 但不包括最后一个字符。
如果忽略第一个索引值(冒号之前), 切片就从字符串第一个字符开始计算。 如果忽略第二个索引值, 切片就计算到最后一个
>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'
如果第一个索引值大于第二个索引值导致空字符串, 只会输出两个引号:
>>> fruit = 'banana'
>>> fruit[3:3]
"
fruit是一个字符串, 那么fruit[:]表示:
>>> fruit=""
>>> fruit[:]
''
>>> fruit="ewsr"
>>> fruit[:]
'ewsr'
在赋值语句的左边使用[]运算符, 尝试改变字符串中的字符。 举例如下:
>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: object does not support item assignment
你不能改变已经存在的字符串。 最好的办法是在原字符串基础上新建一个字符串。
>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print new_greeting
Jello, world!
这个例子将新的首字母与greeting的切片连接在一起。 这不会对原先的字符串造成影响。
下面的程序统计了字母a在字符串中出现的次数:
word = 'banana'
count = 0
for letter in word:
if letter == 'a':
count = count + 1
print count
单词in是一个布尔运算符, 对两个字符串进行比较, 如果第一个字符串是第二个字符串的子串, 则返回True。
>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False
所有的大写字母都在小写字母之前
字符串是一种Python对象。 一个对象包括数据( 即字符串本身) 和方法。 这些方法是内置在对象中的有效函数, 可以作用于对象的任一实例。
Python有一个dir函数, 它可以列出对象所有可用的方法。
当dir函数列出这些方法, 你就可以用help获取关于这些方法的文档。 有关字符串方法比较全面的文档详见
http://docs.python.org/library/string.html。
Python说明文档
调用方法与调用函数类似, 但语法不同。 调用方法的语法是, 使用句点作为分隔, 在变量名后面跟上方法名。
例如, upper方法接收一个字符串, 返回一个全部是大写字母的新字符串:
这次不使用upper(word)函数, 换做word.upper()方法。
>>> word = 'banana'
>>> new_word = word.upper()
>>> print new_word
BANANA
字符串方法find, 找到字符串中字符的所在位置:
>>> word = 'banana'
>>> index = word.find('a')
>>> print index
1
find方法不仅适用字符, 还可以用于寻找子串:
>>> word.find('na')
2
find方法还可以设置第二个参数, 从哪个索引位置开始查找:
>>> word.find('na', 3)
4
利用strip方法移除字符串首尾的空白( 包括空格、 制表符和换行符) 。
>>> line = ' Here we go '
>>> line.strip()
'Here we go'
startswith方法:返回布尔值。
>>> line = 'Please have a nice day'
>>> line.startswith('Please')
True
>>> line.startswith('p')
startswith方法对大小写敏感, 在检查之前, 使用lower方法将其全部转换为小写字母。
>>> line = 'Please have a nice day'
>>> line.startswith('p')
False
>>> line.lower()
'please have a nice day'
>>> line.lower().startswith('p')
True
我们想要在一个字符串中寻找它的子串。 如下是一行结构化的字符串:
From stephen.marquard@ uct.ac.za Sat Jan 5 09:14:16 2008
我们只想抽出电子邮件的第二部分( 即uct.ac.za) , 可以通过find方法和字符串切片来实现。
首先, 在字符串中找到@符号的位置。 其次, 找到@符号之后第一个空格所在的位置。 最后, 再用字符串切片来提取字符串中我们需要的部分。
>>> data = 'From [email protected] Sat Jan 5 09:14:16 2008'
>>> atpos = data.find('@')
>>> print atpos
21
>>> sppos = data.find(' ',atpos)
>>> print sppos
31
>>> host = data[atpos+1:sppos]
>>> print host
uct.ac.za
>>>
这里使用的是find方法的一种用法, 让我们能指定find方法从何处开始寻找。
与C语言中的prinf(“%d”,n)使用方法类似。
格式操作符%可以构建字符串, 使用变量中存储的数据来替代字符串的一部分。 对整数而言, %是模运算符。 如果第一个操作对象是字符串, 那么%就是格式操作符。
第一个操作对象是格式字符串, 它包含一个或多个格式化序列, 用来指定第二个操作对象的格式。 最终处理结果是字符串。
>>> camels = 42
>>> 'I have spotted %d camels.' % camels
'I have spotted 42 camels.'
如果字符串中存在多个格式序列, 那么第二个参数必须是元组。
‘%d’格式化整数, ‘%g’格式化浮点数( 不要问为什么) , ‘%s’格式化字符串:
>>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels')
针对空字符串出错问题:
输入空行之前代码运行正常。 由于没有第0位字符, 我们得到了异常信息反馈。 两种方法可以解决这个问题, 即使这一行为空, 仍然能保证“安全”运行。
一种方法是使用startswith方法, 如果字符串为空就返回False。
另一种方法是使用守护模式, 通过一条if语句进行控制, 保证第二个逻辑表达式只有在字符串中至少有一个字符时进行判断。
if len(line) > 0 and line[0] == '#' :