Python學習筆記 - 5.字符串(find方法,格式操作符%)

字符串是字符的序列

使用方括號運算符逐一訪問每個字符。方括號裏的表達式稱爲索引。

    >>> 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運算符

單詞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] == '#' :
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章