天天看點

Dive in Python學習筆記三:内置資料類型

Dictionary介紹

Dictionary定義了鍵值之間一對一的關系。

定義Dictionary

>>>d = {"server":"mpilgrim","database":"master"}

取值

>>>d["server"] #輸出mpilgrim

修改Dictionary

>>>d["database"]="pubs"

如果key已經存在則修改key對應的value值,否則添加一個key-value對

注意:dictionary的key大小寫敏感

删除dictionary元素

>>>del d['database'] #删除key為database的鍵值對

清空dictionary(删除dictionary所有元素)

>>>d.clear()

List介紹

List是一個用方括号包括起來的有序元素的集合。List可以作為以0下标開始的數組。

List定義

>>>li = ['a','b','z','example']

取List元素

>>>li[-1] #輸出'example'

說明:負數索引從list的尾部開始向前計數來存取元素。li[-n]=li[len(li) - n]。

清單切片list[start:end:step]

start可以省略,預設為0;end可以省略預設為list的長度;step可以省略,預設為1。

li[:n]總是傳回前n個元素,而li[n:]總是傳回剩下的元素。li[:]生成一個list拷貝。

添加元素

1. append向list的末尾追加單個元素

>>>li

['a','b','mpilgrim','z','example']

>>>li.append("new")

>>>li

['a','b','mpilgrim','z','example','new']

2. insert向list指定位置插入單個元素

>>>li

['a','b','mpilgrim','z','example']

>>>li.insert(2,"new")

>>>li

['a','b','new','mpilgrim','z','example']

3. extend連接配接list,将兩個list為一個

>>>li

['a','b','mpilgrim','z','example']

>>>li.extend(["two","elements"])

>>>li

['a','b','mpilgrim','z','example','new','two','elements']

append和extend差別:

1. append接受一個參數,參數可以是任何類型,并簡單地追加到list的尾部

>>>li = ['a','b','c']

>>>li.append(['d','e','f'])

>>>li

['a','b','c',['d','e','f']]

2. extend接受一個參數,參數必須是list類型,并且把該list中的每一個元素添加到原list中

>>>li = ['a','b','c']

>>>li.extend(['d','e','f'])

>>>li

['a','b','c','d','e','f']

list搜尋

index在list中查找一個值的首次出現并傳回索引值。如果沒有找到,則會抛出異常。

測試list是否含有元素

item in list

Python布爾規則:

1. 0為false,其他所有數值皆為true

2. 空串("")為false;其他所有字元串皆為true

3. 空list([])為false;其他所有list皆為true

4. 空tuple(())為false;其他所有tuple皆為true

5. 空dictionary({})為false;其他所有dictionary皆為true

list元素删除

1. remove從list中删除一個值的首次出現,如果有多個值,則隻删除第一個元素。

2. pop删除list的最後一個元素,然後傳回删除元素的值。

list運算符

1. + 連接配接list

list = list + otherlist相當于list.extend(otherlist)。但+運算符把一個新的list作為值傳回,而extend隻修改存在的list。

2. +=

li += ['two']等同于li.extend(['two'])

3. * 重複器

li = [1,2] * 3等同于 li=[1,2]+[1,2]+[1,2],即将三個list連接配接成一個

Tuple介紹

Tuple是不可變的list。Tuple是用小括号包圍的元素清單。

負數索引與list一樣從tuple的尾部開始計數。

與list一樣分片(slice)也可以使用。

Tuple與List的轉換

1. Tuple轉換為List

>>> li = list((1,2))

[1,2]

2. List轉換為Tuple

>>> tu = tuple([1,2])

(1,2)

從效果上看,tuple當機一個list,而list解凍一個tuple。

變量定義

Python也有局部變量和全局變量之分,但沒有明顯的變量聲明。變量通過首次指派産生,當超出作用範圍時自動消亡。

注:當一條指令用續行符("\")分割成多行時,後續的行可以以任何方式縮進,無需遵守Python的嚴格縮進規則。

變量引用

引用未指派的變量為報錯:NameError: There is no variable named 'x'

一次賦多值

>>> v = ('a', 'b', 'e')

>>> (x, y, z) = v

>>> x

'a'

>>> y

'b'

>>> z

'e'

說明:(x,y,z) = v 分别将v中'a','b','c'指派給變量x,y,z

連續值指派

通過range函數生成連續值清單,然後一次性指派給多個變量。

>>>range(7)

[0,2,3,4,5,6,7]

>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)

>>> MONDAY

>>> TUESDAY

1

>>> SUNDAY

6

說明:内置的range函數傳回一個元素為整數的list。這個函數的簡化調用形式是接收一個上限值,然後傳回一個初始值從 0 開始的 list,它依次遞增,直到但不包含上限值。還可以傳入其它的參數來指定一個非 0 的初始值和非 1 的步長。

格式化字元串

Python 支援格式化字元串的輸出。Python中,字元串格式化使用與 C 中 sprintf 函數一樣的文法。

>>> k = "uid"

>>> v = "sa"

>>> "%s=%s" % (k, v)

'uid=sa'

說明:整個表達式的值為一個字元串。第一個 %s 被變量 k 的值替換;第二個 %s 被 v 的值替換。 (k, v) 是一個 tuple。

映射list

Python 的強大特性之一是其對 list 的解析,它提供一種緊湊的方法,可以通過對 list 中的每個元素應用一個函數,進而将一個 list 映射為另一個 list。

>>> li

[1, 9, 8, 4]

>>> li = [elem*2 for elem in li]

>>> li

[2, 18, 16, 8]

注意:對list的解析并不改變原始的list

連接配接list為單個字元串

使用字元串對象的join方法連接配接list的各個元素。

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}

>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])

'server=mpilgrim;uid=sa;database=master;pwd=secret'

說明:

1. 這裡的 join 方法将 list 中的元素連接配接成單個字元串,每個元素用一個分号隔開。分隔符不必是一個分号;它甚至不必是單個字元。它可以是任何字元串。

2. join 隻能用于元素是字元串的 list;它不進行任何的強制類型轉換。對于其他類型需要強制轉換為字元串。

>>> v = [1,2]

>>> ";".join(v)

Traceback (most recent call last):

File "", line 1, in

";".join(v)

TypeError: sequence item 0: expected str instance, int found

>>> ";".join([str(item) for item in v])

'1;2'

分割字元串

字元串的split方法,将字元串按指定分割符分割成list。

>>>s

'server=mpilgrim;uid=sa;database=master;pwd=secret'

>>> s.split(";")

['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']

>>> s.split(";", 1)

['server=mpilgrim', 'uid=sa;database=master;pwd=secret']

說明:split 接受一個可選的第二個參數,它是要分割的次數。