【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信息是什麼;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章