python重寫內建函式 python 內建函式

2021-10-12 11:02:08 字數 4755 閱讀 2015

說明:

zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。

語法:zip(iterable1,iterable2, ...)

引數:iterable -- 乙個或多個可迭代物件(字串、列表、元祖、字典)

返回值:

python2中直接返回乙個由元組組成的列表,python3中返回的是乙個物件,如果想要得到列表,可以用 list() 函式進行轉換。

例項:函式功能是聚合傳入的每個迭代器中相同位置的元素,返回乙個新的元組型別迭代器。

in [5]: l = [1,2,3]

in [6]: ll = [4,5,6]

in [7]: zip_l =zip(l,ll)

in [8]: from collections importiterable

in [9]: isinstance(zip_l,iterable)

out[9]: true

in [10]: for j,k inzip_l:

....:print(j,k)

....:1 4

2 53 6in [11]: list(zip_l)

out[11]: # 返回的是迭代器。

如果傳入的迭代器長度不一致,最短長度的迭代器迭代結束後停止聚合。

in [22]: l_s = [1,2,3] # 長度為3

in [23]: l_l = [4,5,6,7] # 長度為4

in [24]: list(zip(l_s,l_l))

out[24]: [(1, 4), (2, 5), (3, 6)] # 輸出的值是以長度比較短的值進行的。

如果只傳入乙個迭代器,則返回的單個元素元組的迭代器。

in [25]: list(zip([1,2,3]))

out[25]: [(1,), (2,), (3,)]

如果不傳入引數,則返回空的迭代器。

in [26]: list(zip())

out[26]:

zip(*[iter(s)]*n)等效於呼叫zip(iter(s),iter(s),...,iter(s))。

in [28]: l = [1,2,3]

in [29]: ll = l*3in [30]: ll

out[30]: [1, 2, 3, 1, 2, 3, 1, 2, 3]

in [31]: lll = [l]*3in [32]: lll

out[32]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

in [33]: list(zip(*[l]*3))

out[33]: [(1, 1, 1), (2, 2, 2), (3, 3, 3)]

in [34]: list(zip(l,l,l))

out[34]: [(1, 1, 1), (2, 2, 2), (3, 3, 3)]

與 zip 相反,*zip 可理解為解壓,返回二維矩陣式

in [35]: l = [1,2,3]

in [36]: ll = [4,5,6]

in [37]: zip(l,ll)

out[37]: in [38]: list(zip(l,ll))

out[38]: [(1, 4), (2, 5), (3, 6)]

in [39]: zip(*zip(l,ll))

out[39]: in [40]: list(zip(*zip(l,ll)))

out[40]: [(1, 2, 3), (4, 5, 6)]

in [41]: a,b = list(zip(*zip(l,ll)))

in [42]: a

out[42]: (1, 2, 3)

in [43]: b

out[43]: (4, 5, 6)

in [44]: list(a)

out[44]: [1, 2, 3]

in [45]: list(b)

out[45]: [4, 5, 6]

zip的高階應用

轉換二維陣列

in [20]: ll = [[1,2,3],[4,5,6],[7,8,9]]

in [21]: [ [row[col] for row in ll] for col inrange(len(ll[0]))]

out[21]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

使用zip(*)進行轉換

in [22]: ll = [[1,2,3],[4,5,6],[7,8,9]]

in [23]: zip(*ll)

out[23]: in [24]: list(zip(*ll))

out[24]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

in [25]: map(list,zip(*ll))

out[25]: in [26]: list(map(list,zip(*ll)))

out[26]: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

使用zip合併相鄰的列表項

in [42]: a = [1, 2, 3, 4, 5, 6]

in [43]: zip(*([iter(a)] * 2))

out[43]: in [44]: list(zip(*([iter(a)] * 2)))

out[44]: [(1, 2), (3, 4), (5, 6)]

合併列表式的乙個推導式

in [71]: group_adjacent = lambda a, k: zip(*([iter(a)] *k))

in [72]: group_adjacent(a, 3)

out[72]: in [73]: list(group_adjacent(a, 3))

out[73]: [(1, 2, 3), (4, 5, 6)]

in [74]: list(group_adjacent(a, 2))

out[74]: [(1, 2), (3, 4), (5, 6)]

in [75]: list(group_adjacent(a, 1))

out[75]: [(1,), (2,), (3,), (4,), (5,), (6,)]

in [76]: zip(a[::2], a[1::2])

out[76]: in [77]: list(zip(a[::2], a[1::2]))

out[77]: [(1, 2), (3, 4), (5, 6)]

in [78]: zip(a[::3], a[1::3], a[2::3])

out[78]: in [79]: list(zip(a[::3], a[1::3], a[2::3]))

out[79]: [(1, 2, 3), (4, 5, 6)]

in [80]: group_adjacent = lambda a, k: zip(*(a[i::k] for i inrange(k)))

in [81]: list(group_adjacent(a, 3))

out[81]: [(1, 2, 3), (4, 5, 6)]

in [82]: list(group_adjacent(a, 2))

out[82]: [(1, 2), (3, 4), (5, 6)]

in [83]: list(group_adjacent(a, 1))

out[83]: [(1,), (2,), (3,), (4,), (5,), (6,)]

使用zip和iterators生成滑動視窗 (n -grams)

in [85]: defn_grams(a, n):

....: z= (islice(a, i, none) for i inrange(n))

....:return zip(*z)

in [86]: a = [1, 2, 3, 4, 5, 6]

in [87]: list(n_grams(a, 3))

out[87]: [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

in [88]: list(n_grams(a, 2))

out[88]: [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

in [89]: list(n_grams(a, 1))

out[89]: [(1,), (2,), (3,), (4,), (5,), (6,)]

in [90]: list(n_grams(a, 4))

out[90]: [(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

使用zip反轉字典

in [91]: m =

in [92]: m.items()

out[92]: dict_items([('d', 4), ('c', 3), ('b', 2), ('a', 1)])

in [93]: zip(m.values(), m.keys())

out[93]: in [94]: list(zip(m.values(), m.keys())

in [94]: list(zip(m.values(), m.keys()))

out[94]: [(4, 'd'), (3, 'c'), (2, 'b'), (1, 'a')]

in [95]: mi =dict(zip(m.values(), m.keys()))

in [96]: mi

out[96]:

python內建函式簡稱 Python內建函式詳解

此文參考python文件,然後結合自己的理解,寫下來,一方面方便自己,讓自己好好學習,順便回憶回憶 另一方面,讓喜歡的盆友也參考一下。經查詢,3.6版本總共有68個內建函式,主要分類如下 數 算 7個 型別轉換 24個 序列操作 8個 物件操作 9個 反射操作 8個 變數操作 2個 互動操作 2個 ...

python內建函式使用 python內建函式使用

eval函式執行python表示式,有返回值 eval 1 2 3 4 5 exec函式執行的是python語句,沒有返回值 exec print 123 將字串型別的 編碼.物件能夠通過exec語句來執行或者eval 進行求值,c只是編譯,不執行 code for i in range 10 pr...

python內建函式

filter 函式 filter 函式包括兩個引數,分別是function和list。該函式根據function引數返回的結果是否為真來過濾list引數中的項,最後返回乙個新列表,如下例所示 a 1,2,3,4,5,6,7 b filter lambda x x 5,a print b 6,7 如果...