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?