字符串不同於整型,浮點數和布爾類型;字符串是一個序列,這意味着,它是其他值的一個有序的集合;
(一)字符串是一個序列
字符串是字符組成的序列,可以使用括號運算符訪問每個字符:
>>> 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信息是什麼;