20170404Python內置的序列函數、字典

Python內置的序列函數、字典

Python內置的序列函數

Python有一些很不錯的序列函數。

enumerate()函數,它可以逐個返回序列的(i,value)元組(i用於跟蹤當前項的索引):

範例1:

>>> some_list = [foo , "bar" , baz]

>>> empty_dict = {}

>>> for i ,value in enumerate(some_list):

tempty_dict.update({i:value})

>>> empty_dict

{0: foo, 1: bar, 2: baz}

>>>

範例2:

>>> some_list = [foo , "bar" , baz]

>>> mapping = dict((i,v) for i , v in enumerate(some_list))

>>> mapping

{0: foo, 1: bar, 2: baz}

>>> mapping2 = dict((v,i) for i,v in enumerate(some_list))

>>> mapping2

{foo: 0, bar: 1, baz: 2}

>>>

sorted()函數可以將任何序列返回一個新的有序列表:

>>> name = [1,2,3,7,0,9,4]

>>> sorted(name)

[0, 1, 2, 3, 4, 7, 9]

>>>

zip()函數用於將多個序列(列表、元組)中的元素「配對」,從而產生一個新的元組列表:

>>> seq1 = [foo , bar , baz]

>>> seq2 = ["one" , "two" , "three"]

>>> seq = zip(seq1,seq2)

>>> seq

<zip object at 0x0000000002EAC908>

>>> dir(seq) #Python3中seq返回的是一個對象。

[__class__, __delattr__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __iter__, __le__, __lt__, __ne__, __new__, __next__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__]

>>> list(seq)

[(foo, one), (bar, two), (baz, three)]

>>>

字典

字典可算是Python中最重要的內置數據結構。又名哈希映射相聯數組。它是一種大小可變鍵值對集,其中的鍵和值都是Python的對象。創建字典的方式之一是:使用大括弧({})並用冒號分割鍵和值

>>> empty_dict = {}

>>> d1 = {"a" : "some_value", b : [1,2,3,4]}

>>> d1

{a: some_value, b: [1, 2, 3, 4]}

>>> d1[a]

some_value

訪問(以及插入、設置)元素的語法和列表、元組是一樣的:

>>> d1[7] = " an integer "

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer }

>>> d1["m"] = qianhua

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer , m: qianhua}

>>>

可以使用in來判斷字典中是否存在某個鍵,但是不能判斷字典中是否存在某個值。

>>> 7 in d1

True

>>> "qianhua" in d1

False

>>> "a" in d1

True

>>>

使用del關鍵字或pop方法(刪除指定值之後將其返回)可以刪除值:

>>> d1[5] = "some value"

>>> d1[dummy] = another value

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer , m: qianhua, 5: some value, dummy: another value}

>>> del d1[5]

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer , m: qianhua, dummy: another value}

>>> ret = d1.pop ("dummy")

>>> ret

another value

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer , m: qianhua}

>>>

Keys和values分別用於獲取鍵和值的列表。雖然鍵值對沒有特定的順序,但這兩個函數會以相同的順序輸出鍵和值:

註:使用Python3,則dict.keys()和dict.values()會返回迭代器而不是列表。

>>> d1.keys()

dict_keys([a, b, 7, m])

>>> d1.values ()

dict_values([some_value, [1, 2, 3, 4], an integer , qianhua])

>>>

利用update方法,一個字典可以被合併到另外一個字典中去:

>>> d1

{a: some_value, b: [1, 2, 3, 4], 7: an integer , m: qianhua}

>>> d1.update ({"a" : foo,"c" : 12})

>>> d1

{a: foo, b: [1, 2, 3, 4], 7: an integer , m: qianhua, c: 12}

>>>

從序列類型創建字典

>>> a = list(range(5))

>>> a

[0, 1, 2, 3, 4]

>>> b = list(reversed(a))

>>> b

[4, 3, 2, 1, 0]

>>> zip(a,b)

<zip object at 0x0000000002EACCC8>

>>> m = list(zip(a,b))

>>> m

[(0, 4), (1, 3), (2, 2), (3, 1), (4, 0)]

>>> n = dict(zip(a,b)) #從序列類型創建字典

>>> n

{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}

>>>

字典鍵的有效類型

雖然字典的額值可以是任何的Python對象,但鍵必須是不可變對象,如標量類型(整數、浮點數、字元串)或元組(元組中所有對象也必須是不可變的)。可以利用hash()函數判斷某個對象是否是可哈希的(即可以用作字典的鍵)。


推薦閱讀:

天秤座的相親女最多?——浙江省相親大數據報告
用quantmod包分析股票
從非結構化數據中發現價值
網上學習總覺虛,只因工作未做實。突破面試,實戰技巧
知乎探索(一)——聽說你也想做大V?

TAG:Python | 数据分析 |