python基礎類型(一):字符串和列表

一、字符串

與 C語言相比,Python沒有字符類型,只有字符串類型。

Python中的字符串是用雙引號或單引號包裹的一串字符。如:

s = 'a'
s = 'aaa'
s = "a"
s = "aaa"
s = '"""'
s = "'''"
s = "''"''"

注意到最後三個的單雙引號是嵌套使用的,但是最後一個的使用方法是錯誤的,因爲當我們混合使用兩種引號時必須有一種用來劃分字符串的邊界,即在兩邊的引號不能出現在字符串當中,否則 Python解釋器會報錯。

1. 截取字符串

其他的語言中一般將截取字符串定義爲一個方法,比如 C語言中的 substr方法就可以返回字符串指定位置之間的一個字串。

但是在 Python中我們採用一種更簡潔直觀的方式,看如下代碼:

s = "i_am_a_sher."

print('s is:', s)
print('s[0]: ', s[0])
print('s[1:]: ', s[1:])
print('s[1:3]: ', s[1:3])
print('s[1::2]: ', s[1::2])
print('s[-1]: ', s[-1])
print('s[-3:-1]: ', s[-3:-1])
print('s[-3::2]: ', s[-3::2])

'''
s is: i_am_a_sher.
s[0]:  i
s[1:]:  _am_a_sher.
s[1:3]:  _a
s[1::2]:  _mase.
s[-1]:  .
s[-3:-1]:  er
s[-3::2]:  e.
'''

在 Python中字符串被視爲一個可迭代的對象,可迭代指實現了 iter接口,可以直接使用for t in object語法的對象,簡單來講可以把字符串看作一個存儲字符的數組。

所以當我們打印s[0]時會將字符串的第一個字母打印出來。

Python還爲字符串切片提供了非常便利的操作,比如:

s[1:]表示 s中第二個及以後的所有字符。

s[1:3]表示 s中第二個到到第四個字符之間的所有字符(包括前者但不包括後者,即包括第二個但不包括第四個)。

s[1::2]表示從 s中第二個字符開始取,每移動兩個字符取一個,所以我們取到的結果是第 2、4、6、8、10個字符。

當給出的數字爲負數時,表示從字符串的末尾開始計數,所以s[-1]表示字符串倒數第一個字符。

這裏使用 -1表示倒數第一個字符,0表示正數第一個字符(因爲沒有 -0)。

::後面的數字爲正時表示從左到右計數,爲負數時表示從右到左計數。

2. 拼接字符串

拼接字符串我們直接使用+,如:

s_1 = 'aaa'
s_2 = 'bbb'
print('s_1 + s_2:', s_1+s_2)
"""
s_1 + s_2: aaabbb
"""

3.字符串的常用方法

  1. encode(str: codec)->bytes:接受一個編碼字符串作爲參數,返回編碼後的二進制編碼,

    如:s.encode('utf-8')

  2. split(str: spl)->list:一給定的字符串 spl將原字符串分割爲多個字串,並返回一個字串列表

    如:s.split('_'),結果爲:['i', 'am', 'a', 'sher']

  3. strip():去除字符串兩端的空字符(包括換行、空格、製表符等其他不可見的符號),lstrip()rstrip()則分別去除字符串左邊和右邊的空字符。

  4. replace(str: old, str: new)->str:替換字符串中的某些字串,要替換的字串通過 old給出,用來替換的字串通過 new給出,如:s.replace('a', 'b')的結果爲:i_bm_b_sher.

  5. join(list: l)->str:用原字符串將給定的列表拼接成一個字符串。

    如:'_'.join(['i', 'am', 'a', 'sher.'])的結果就是i_am_a_sher..

二、列表

Python中的列表和數組類似,不過與數組只能存儲一種元素相比,一個列表中可以存儲任意元素,比如:

l = ['a', 1, ['a']]

在列表 l中我們存儲了三種數據類型,分別是字符串、整數和列表

與數組相同的是,我們可以使用下表來訪問列表中的元素,比如:

l[0]   # 'a'
l[1]   # 1
l[2]   # ['a']
l[3]   # IndexError

同樣,如果訪問了一個不存在的下標,程序就會拋出 IndexError錯誤。

1. 截取列表

截取列表的操作和截取字符串的操作完全相同,可以參考截取字符串。

2. 合併列表

合併列表可以像拼接字符串一樣使用+將兩個列表合併,如:

l_1 = [1,2,3,4]
l_2 = [5,6,7,8]
l_3 = l_1 + l_2
# l_3 = [1,2,3,4,5,6,7,8]

也可以使用 extend(list: l)方法將要合併的列表直接追加到原來的列表後面。

注意:extend()方法沒有返回值,這個方法直接在原來的列表上進行操作。

3. 列表的常用方法

  1. append(any: element):向列表尾部添加一個元素

  2. insert(any: element, int: index):向列表中特定的位置插入一個元素,原來在那個位置的元素及其後面的所有元素均向後移動一個位置。

  3. index(any: element)->int:返回所給元素在列表中從左到右第一個匹配的元素的位置,若所給元素不在列表中則拋出 ValueError錯誤。

  4. remove(any: value):將從左到右第一個匹配的元素從列表中移除,如果所給值不在列表中則拋出 ValueError錯誤。

  5. sort():將列表中的元素進行排序,直接在原列表中進行操作,沒有返回值。

  6. pop():從列表的右邊取出一個元素,並將該元素從列表中移除。

  7. reverse():反轉列表,如:

    l = [1,2,3,4,5]
    l.reverse()
    # l = [5,4,3,2,1]
    
  8. 關鍵字 in的使用:可以用關鍵字 in來判斷一個元素是否在列表中,如:

    l = [1,2,3,4,5]
    1 in l # True
    6 in l # False
    #可以使用 in和 index()配合來獲取元素在列表中的位置
    def indexOf(l, element):
        if element in l:
            index = l.index(element)
        else:
            index = -1
        return index
    #可以使用 in和 remove()將元素從列表中移除
    def remove(l, element):
        if element in l:
            l.remove(element)
        else:
            pass
    
    
  9. for遍歷列表, 如:

    l = [1,2,3,4,5,6,7,8]
    # 如果要將 l中的元素逐個打印出來,其他的方法是:
    for i in range(len(l)):
        print(l[i])
    # 但是在 python中不需要這麼麻煩
    for t in l:
        print(l)
    

三、練習

1. 日期格式轉換

有多種日期格式:2018/10/28、2018.10.28、20181028、2018-10-28

現在我們需要編寫一個程序將前三種格式轉換爲第四種格式。

要求:

  1. 不能使用 python類庫
  2. 將代碼封裝成一個函數:date_trans(str: date)->str接受一個字符串輸入,輸出第四種日期格式
  3. 需要處理不規範輸入引起的錯誤,當遇到不規範輸入時拋出 ValueError錯誤並給出提示

2. 雙向隊列

現有函數簽名:b_pop(list: l, str: direction)

該函數實現的功能是:當 direction的值爲 'left'時從列表的左邊取出一個元素返回,當 direction的值爲 'right'時從列表的右邊取出一個元素返回,當列表爲空時返回 None

要求:

  1. 在取出元素前後列表原有的元素排列方向不變
  2. 當 l和 direction的值非法時拋出 ValueError錯誤並給出提示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章