【Think Python】Python笔记(八)字符串

字符串不同于整型,浮点数和布尔类型;字符串是一个序列,这意味着,它是其他值的一个有序的集合;

(一)字符串是一个序列

字符串是字符组成的序列,可以使用括号运算符访问每个字符:

>>> fruit = "apple"
>>> letter = fruit[1]
  • 中括号中的表达式称之为索引(index);索引必须是整数
  • 索引有正序和逆序:
    • 正序的索引从0开始,向右依次增加1;
    • 逆序的索引从-1,开始 ,向左依次减少1;

(二)len()内建函数

这个函数可以返回一个字符串中字符的数量;

>>> fruit = 'apple'
>>> len(fruit)
5
  • 这里需要注意,字符串最后一个字符的Index是len(str) - 1;

(三)使用for循环遍历

遍历:即从字符串的头部开始,一个字符一个字符进行处理,直到字符串的结尾;

  • 进行遍历的方法之一是while循环:
index = 0
while index < len(fruit):
    letter = fruit[index]
    print(letter)
    index = index + 1
  • 另一种办法是使用for循环:
for letter in fruit:
    prrint(letter)

每次循环的时候,字符串中的下一个字符被赋值给变量letter;循环继续,直到没有剩下的字符了;

(四)字符串切片

字符串的一个片段称之为一个切片(slice),选择一个切片的操作类似于选择一个字符:

>>> s = 'Monty Python'
>>> s[0 : 5]
'Monty'
>>> s[6 : 12]
'Python'
  • 这里需要注意的是,[n, m]操作符返回从第n个字符到第m个字符的字符串的片段【不包含第m个字符】:

  • 省略第一个索引(即冒号前面的),切片始于字符串的头部;省略第二个索引(冒号后面的),切片一直到字符串结尾;

    >>> fruit = 'apple'
    >>> fruit[:3]
    'app'
    >>> fruit[3:]
    'le'
    
  • 如果第一个索引大于第二个索引,结果是空字符串(empty string),用两个引号表示:

>>> fruit = 'apple'
>>> fruit = [3:3]
''

一个空字符串不包含字符且长度为0,除此之外,和正常的字符串一样;

(五)字符串是不可变的

字符串是不可变的(immutable),即不可改变一个已经存在的字符串:

>>> greeting = 'Hello, World'
>>> greeting[0] = 'J'
TypeError: 'str' object does not support item assignment
  • 只能新建一个字符串,在原有的字符串上略有变化:
>>> greeting = 'Hello, World'
>>> new_greeting = 'J' + greeting[1:]
>>> neew_greeting
'Jello, World'

(六)搜索

类似遍历一个序列,并在找到寻找的东西时返回,称之为搜索(search)

  • 在某种意义上,find[] 运算符相反。与接受一个索引并提取相应的字符不同, 它接受一个 字符并找到该字符所在的索引。如果没有找到该字符,函数返回 -1

(七)循环和计数

如下程序:

count = 0
for letter in word:
    if letter == 'a':
        count = count + 1
print(count)

(八)字符串方法

  • 字符串提供了多种有用操作的方法
  • 方法和函数类似,接受实参并返回一个值,但是语法不同;

upper方法接受一个字符串,并返回一个都是大写字母的新的字符串,但是使用的不是函数语法upper(word),而是方法的语法word.upper()

>>>word = 'apple'
>>>new_word = word.upper()
>>>new_word
'APPLE'
  • 点标记法的形式指出方法的名字,即upper,以及应用该方法的字符串的名字,word 。 空括号表明该方法不接受实参;

  • 这称之为方法调用(invocation);

  • 字符串的find方法,可以查找字符串和字符:

>>> fruit = 'apple'
>>> fruit.find('l')
3
>>> fruit.find('in')
1

这个方法还可以接受第二个参数,表示从何处开始的索引【默认情况下从首字母开始查找】

>>> fruit.find('p', 2)
2

这是一个可选参数(Optional argument),find还可以接受第三个参数(也是可选的):

>>> name = 'bob'
>>> name.find('b', 1, 2)
-1

上面的结果是查找失败,因为在索引1-2(不包括2)之间并没有’b’;

(九)in运算符

  • in是一个bool运算符,接受两个字符串;
  • 如果第一个作为子串出现在第二个字符串中,返回True;
>>> 'a' in 'apple'
True
>>> 'seed' in 'apple'
False
  • 变量名非常重要,可以提高代码的可读性

(十)字符串比较

关系运算符也使用于字符串;

  • 这样可以检查两个字符串是不是相等:
if word == 'apple':
    print('All right, apples.')
  • 对于其他类型的关系运算符,对于按字母放置单词很有用:
if word < 'banana':
    print('Your word, ' + word + ', comes before banana.')
elif word > 'banana':
    print('Your word, ' + word + ', comes after banana.')
else:
    print('All right, bananas.')
  • python 处理大学和小写字母的方式和人不同,Python中所有的大写字母在小写字母之前
  • 解决这个问题的方式是,在比较之前,将字符串转化为标准格式;

(十一)调试

当你使用索引遍历序列中的值时,正确地指定遍历的起始和结束点有点困难;

  • 有时候出现数组索引越界的情况,这时候可能我们使用的index超过了数组的范围;
    • 可以选择在出错的地方打印出index,这样能够告诉我们这个时候index信息是什么;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章