1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【Python基礎(chǔ)】Python中的高效迭代庫itertools,排列組合隨便求

        共 23217字,需瀏覽 47分鐘

         ·

        2021-02-12 04:11

        ?10?11?12?13?14?...","26:\"9944989\"|27:\"10\""],[20,"\n","7:0"]],"25:\"fnyq\"|27:\"10\"|7:0"],"A3":[40,[[20,"cycle()","0:\"%236363bb\"|16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.cycle\"|1:\"transparent\"|26:\"9944989\"|27:\"10\"|31:2"],[20,"\n","24:\"iTOY\"|7:0"]],"25:\"Myw4\"|27:\"10\"|7:0"],"B3":[40,[[20,"p","26:\"9944989\"|27:\"10\""],[20,"\n","24:\"KxjC\"|7:0"]],"25:\"QqJC\"|27:\"10\"|7:0"],"C3":[40,[[20,"p0, p1, ... plast, p0, p1, ...","26:\"9944989\"|27:\"10\""],[20,"\n","24:\"E7lo\"|7:0"]],"25:\"YShY\"|27:\"10\"|7:0"],"D3":[40,[[20,"cycle('ABCD')?-->?A?B?C?D?A?B?C?D?...","26:\"9944989\"|27:\"10\""],[20,"\n","7:0"]],"25:\"4fFo\"|27:\"10\"|7:0"],"A4":[40,[[20,"repeat()","0:\"%236363bb\"|16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.repeat\"|1:\"transparent\"|26:\"9944989\"|27:\"10\"|31:2"],[20,"\n","24:\"hLDE\"|7:0"]],"25:\"Br9Q\"|27:\"10\"|7:0"],"B4":[40,[[20,"elem [,n]","26:\"9944989\"|27:\"10\""],[20,"\n","24:\"FZvr\"|7:0"]],"25:\"jYVu\"|27:\"10\"|7:0"],"C4":[40,[[20,"elem, elem, elem, ... 重復(fù)無限次或n次","26:\"9944989\"|27:\"10\""],[20,"\n","24:\"RLTb\"|7:0"]],"25:\"qShA\"|27:\"10\"|7:0"],"D4":[40,[[20,"repeat(10,?3)?-->?10?10?10","26:\"9944989\"|27:\"10\""],[20,"\n","7:0"]],"25:\"4eTj\"|27:\"10\"|7:0"]},[[10,1,"26:\"9944989\"|4:32"],[10,3,"26:\"9944989\"|4:54"]],[[10,1,"3:88"],[10,1,"3:75"],[10,1,"3:196"],[10,1,"3:257"]]],"25:\"hqIZvO\"|readOnly:false"],[20,"3.1 ","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"count()","0:\"%23ff0000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"yGhp\"|32:2"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"返回以start開始,step遞增的序列,無限遞增","27:\"10\"|31:2"],[20,"\n","24:\"HaE1\""],[20,"語法:itertools.count(start=0,step=1)","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"I8XX\"|7:3"],[20,"for each in itertools.count(start=0, step=2):"],[20,"\n","24:\"U26I\"|36:131"],[20,"? ? print (each)"],[20,"\n","24:\"lBOO\"|36:131"],[20,"1"],[20,"\n","24:\"Nrss\"|36:131"],[20,"2"],[20,"\n","24:\"Gq3C\"|36:131"],[20,"..."],[20,"\n","24:\"i1ye\"|36:131"],[20,"100003"],[20,"\n","24:\"47Uk\"|36:131"],[20,"\n","24:\"SfiE\"|36:131"],[20,"'''小應(yīng)用, 當(dāng)取到第三個(gè) A 時(shí)停止'''"],[20,"\n","24:\"WHd1\"|36:131"],[20,"test_str = ''"],[20,"\n","24:\"UakC\"|36:131"],[20,"for i in itertools.cycle('ABC'):"],[20,"\n","24:\"jaMI\"|36:131"],[20," test_str += i"],[20,"\n","24:\"IQG8\"|36:131"],[20," if test_str.count('A') >= 3:"],[20,"\n","24:\"hVYt\"|36:131"],[20," break"],[20,"\n","24:\"lqdD\"|36:131"],[20,"print(test_str)"],[20,"\n","24:\"5nrc\"|36:131"],[20,"# ABCABCA"],[20,"\n","24:\"p9aL\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"FpGU\"|32:2|7:3"],[20,"3.2 cycle()","0:\"%23c00000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"2q8o\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"將迭代器進(jìn)行無限迭代","27:\"10\"|31:2"],[20,"\n","24:\"n5Rp\""],[20,"語法:","27:\"10\"|31:2|8:1"],[20,"itertools.cycle(iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"7TxA\"|7:3"],[20,"for each in itertools.cycle('ab'):"],[20,"\n","24:\"m5o7\"|36:131"],[20,"? ? print(each)"],[20,"\n","24:\"qH5P\"|36:131"],[20,"a"],[20,"\n","24:\"zxH0\"|36:131"],[20,"b"],[20,"\n","24:\"YdXp\"|36:131"],[20,"..."],[20,"\n","24:\"FCiB\"|36:131"],[20,"b"],[20,"\n","24:\"tT52\"|36:131"],[20,"a"],[20,"\n","24:\"hKhx\"|36:131"],[20,"3.3 repeat()","0:\"%23c00000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"Mniw\"|32:2"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"不停的返回object對(duì)象,如果指定了times,則返回times次 ","27:\"10\"|31:2"],[20,"\n","24:\"W23a\""],[20,"語法:itertools.repeat(object,[,times])","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"gmH1\""],[20,"for each in itertools.repeat('ab', 2):"],[20,"\n","24:\"7nhV\"|36:131"],[20,"print(each)"],[20,"\n","24:\"NZQC\"|36:131"],[20,"ab"],[20,"\n","24:\"vSWc\"|36:131"],[20,"ab? ??"],[20,"\n","24:\"CKhD\"|36:131"],[20,"\n","24:\"NeK2\"|7:3"],[20,"四、有限迭代器","0:\"%23000000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"Ed8n\"|32:1|7:3"],[30,[{"A1":[40,[[20,"迭代器","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"Tibn\"|27:\"10\""],"B1":[40,[[20,"實(shí)參","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"XI5L\"|27:\"10\""],"C1":[40,[[20,"結(jié)果","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"xP3o\"|27:\"10\""],"D1":[40,[[20,"示例","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"qapB\"|27:\"10\""],"A2":[40,[[20,"accumulate()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.accumulate\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"T6HN\"|27:\"10\""],"B2":[40,[[20,"p [,func]","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"G7SR\"|27:\"10\""],"C2":[40,[[20,"p0, p0+p1, p0+p1+p2, ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"cOFj\"|27:\"10\""],"D2":[40,[[20,"accumulate([1,2,3,4,5])?-->?1?3?6?10?15","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"WgJx\"|27:\"10\""],"A3":[40,[[20,"chain()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.chain\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"sjGa\"|27:\"10\""],"B3":[40,[[20,"p, q, ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"U2X6\"|27:\"10\""],"C3":[40,[[20,"p0, p1, ... plast, q0, q1, ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"CY0T\"|27:\"10\""],"D3":[40,[[20,"chain('ABC',?'DEF')?-->?A?B?C?D?E?F","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"lDp8\"|27:\"10\""],"A4":[40,[[20,"chain.from_iterable()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.chain.from_iterable\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"D3zF\"|27:\"10\""],"B4":[40,[[20,"iterable","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"ARqg\"|27:\"10\""],"C4":[40,[[20,"p0, p1, ... plast, q0, q1, ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"WekN\"|27:\"10\""],"D4":[40,[[20,"chain.from_iterable(['ABC',?'DEF'])?-->?A?B?C?D?E?F","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"4qxW\"|27:\"10\""],"A5":[40,[[20,"compress()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.compress\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"6dtq\"|27:\"10\""],"B5":[40,[[20,"data, selectors","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"uKNz\"|27:\"10\""],"C5":[40,[[20,"(d[0] if s[0]), (d[1] if s[1]), ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"kHEO\"|27:\"10\""],"D5":[40,[[20,"compress('ABCDEF',?[1,0,1,0,1,1])?-->?A?C?E?F","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"wiWn\"|27:\"10\""],"A6":[40,[[20,"dropwhile()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.dropwhile\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"h7MY\"|27:\"10\""],"B6":[40,[[20,"pred, seq","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"3nTF\"|27:\"10\""],"C6":[40,[[20,"seq[n], seq[n+1], ... 從pred首次真值測(cè)試失敗開始","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"Ykdq\"|27:\"10\""],"D6":[40,[[20,"dropwhile(lambda?x:?x<5,?[1,4,6,4,1])?-->?6?4?1","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"JpHo\"|27:\"10\""],"A7":[40,[[20,"filterfalse()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.filterfalse\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"zrp3\"|27:\"10\""],"B7":[40,[[20,"pred, seq","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"p6DN\"|27:\"10\""],"C7":[40,[[20,"seq中pred(x)為假值的元素,x是seq中的元素。","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"fqjg\"|27:\"10\""],"D7":[40,[[20,"filterfalse(lambda?x:?x%2,?range(10))?-->?0?2?4?6?8","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"Lfh0\"|27:\"10\""],"A8":[40,[[20,"groupby()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.groupby\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"B733\"|27:\"10\""],"B8":[40,[[20,"iterable[, key]","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"CKfZ\"|27:\"10\""],"C8":[40,[[20,"根據(jù)key(v)值分組的迭代器","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"jYfN\"|27:\"10\""],"D8":[40,[[20,"\n"]],"25:\"cCHy\"|27:\"10\""],"A9":[40,[[20,"islice()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.islice\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"mYuQ\"|27:\"10\""],"B9":[40,[[20,"seq, [start,] stop [, step]","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"k4TD\"|27:\"10\""],"C9":[40,[[20,"seq[start:stop:step]中的元素","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"NYxX\"|27:\"10\""],"D9":[40,[[20,"islice('ABCDEFG',?2,?None)?-->?C?D?E?F?G","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"MmFL\"|27:\"10\""],"A10":[40,[[20,"starmap()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.starmap\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"5xqq\"|27:\"10\""],"B10":[40,[[20,"func, seq","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"G2SD\"|27:\"10\""],"C10":[40,[[20,"func(*seq[0]), func(*seq[1]), ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"pwo0\"|27:\"10\""],"D10":[40,[[20,"starmap(pow,?[(2,5),?(3,2),?(10,3)])?-->?32?9?1000","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"MldL\"|27:\"10\""],"A11":[40,[[20,"takewhile()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.takewhile\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"bTOK\"|27:\"10\""],"B11":[40,[[20,"pred, seq","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"N37x\"|27:\"10\""],"C11":[40,[[20,"seq[0], seq[1], ..., 直到pred真值測(cè)試失敗","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"RVgR\"|27:\"10\""],"D11":[40,[[20,"takewhile(lambda?x:?x<5,?[1,4,6,4,1])?-->?1?4","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"NIkQ\"|27:\"10\""],"A12":[40,[[20,"tee()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.tee\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"5cZJ\"|27:\"10\""],"B12":[40,[[20,"it, n","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"0yVp\"|27:\"10\""],"C12":[40,[[20,"it1, it2, ... itn 將一個(gè)迭代器拆分為n個(gè)迭代器","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"q1Ze\"|27:\"10\""],"D12":[40,[[20,"\n"]],"25:\"T0hJ\"|27:\"10\""],"A13":[40,[[20,"zip_longest()","16:\"https%3A%2F%2Fdocs.python.org%2Fzh-cn%2F3%2Flibrary%2Fitertools.html%23itertools.zip_longest\"|26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"dgsR\"|27:\"10\""],"B13":[40,[[20,"p, q, ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"Rxdy\"|27:\"10\""],"C13":[40,[[20,"(p[0], q[0]), (p[1], q[1]), ...","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"02AM\"|27:\"10\""],"D13":[40,[[20,"zip_longest('ABCD',?'xy',?fillvalue='-')?-->?Ax?By?C-?D-","26:\"9944989\"|27:\"10\""],[20,"\n"]],"25:\"KHS5\"|27:\"10\""]},[[10,1,"26:\"9944989\"|4:32"],[10,4,"26:\"9944989\"|4:54"],[10,2,"26:\"9944989\"|4:76"],[10,1,"26:\"9944989\"|4:54"],[10,1,"26:\"9944989\"|4:98"],[10,1,"26:\"9944989\"|4:54"],[10,2,"26:\"9944989\"|4:76"],[10,1,"26:\"9944989\"|4:54"]],[[10,1,"26:\"9944989\"|3:147"],[10,1,"26:\"9944989\"|3:105"],[10,1,"26:\"9944989\"|3:112"],[10,1,"26:\"9944989\"|3:252"]]],"25:\"keQmJ6\"|readOnly:false"],[20,"4.1 ","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"accumulate()","0:\"%23ff0000\"|27:\"10\""],[20,"\n","24:\"HjNo\"|32:2|7:3"],[20,"作用:","0:\"%23000000\"|27:\"10\"|31:2|8:1"],[20,"創(chuàng)建一個(gè)迭代器,返回累積匯總值或其他雙目運(yùn)算函數(shù)的累積結(jié)果值(通過可選的?func?參數(shù)指定),,若傳入?func,則按照?func?中的方法執(zhí)行。","27:\"10\""],[20,"\n","24:\"CkAe\"|7:3"],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"itertools.accumulate(iterable[, func, ","0:\"%2337d9f0\"|27:\"10\"|31:2"],[20," ","27:\"10\""],[20,"*, initial=None])","0:\"%2337d9f0\"|27:\"10\"|31:2"],[20,"\n","24:\"4FFE\"|7:3"],[20,"iterable: 可迭代對(duì)象","27:\"10\""],[20,"\n","24:\"qPtA\"|27:\"10\"|7:3|bullet-id:\"0Mut\"|bullet:\"ring\""],[20,"func: 帶有兩個(gè)參數(shù)的函數(shù), 可選參數(shù),func?參數(shù)有幾種用法。它可以被設(shè)為?min()?最終得到一個(gè)最小值,或者設(shè)為?max()?最終得到一個(gè)最大值,或設(shè)為?operator.mul()?最終得到一個(gè)乘積。攤銷表可通過累加利息和支付款項(xiàng)得到。給iterable設(shè)置初始值并只將參數(shù)?func?設(shè)為累加總數(shù)可以對(duì)一階?","27:\"10\""],[20,"遞歸關(guān)系","16:\"https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRecurrence_relation\"|27:\"10\""],[20,"?建模。 ","27:\"10\""],[20,"\n","24:\"0WJa\"|27:\"10\"|7:3|bullet-id:\"0Mut\"|bullet:\"ring\""],[20,"initial: 關(guān)鍵字參數(shù), 默認(rèn)為 None, 若此參數(shù)傳參, 則此參數(shù)作為 iterable 的第一個(gè)元素","27:\"10\""],[20,"\n","24:\"66EG\"|27:\"10\"|7:3|bullet-id:\"0Mut\"|bullet:\"ring\""],[20,"'''默認(rèn)情況, 返回累計(jì)匯總值'''"],[20,"\n","24:\"nO4Q\"|36:131"],[20,"list(itertools.accumulate([1, 2, 3, 4, 5]))"],[20,"\n","24:\"I8cA\"|36:131"],[20,"[1, 3, 6, 10, 15]"],[20,"\n","24:\"gXoa\"|36:131"],[20,"\n","24:\"lY7L\"|36:131"],[20,"'''方法修改為計(jì)算累計(jì)的乘積'''"],[20,"\n","24:\"MdwR\"|36:131"],[20,"import operator #該模塊輸出一系列對(duì)應(yīng)Python內(nèi)部操作符的函數(shù)"],[20,"\n","24:\"YiiA\"|36:131"],[20,"data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]"],[20,"\n","24:\"lym5\"|36:131"],[20,"list(itertools.accumulate(data, operator.mul))?"],[20,"\n","24:\"OwNH\"|36:131"],[20,"[3, 12, 72, 144, 144, 1296, 0, 0, 0, 0]"],[20,"\n","24:\"ZNLb\"|36:131"],[20,"\n","24:\"KoSX\"|36:131"],[20,"'''方法修改為計(jì)算累計(jì)的最大值'''"],[20,"\n","24:\"aydP\"|36:131"],[20,"list(itertools.accumulate(data, max))"],[20,"\n","24:\"I0NH\"|36:131"],[20,"[3, 4, 6, 6, 6, 9, 9, 9, 9, 9]??"],[20,"\n","24:\"6G4g\"|36:131"],[20,"\n","24:\"MpaN\"|36:131"],[20,"# Amortize a 5% loan of 1000 with 4 annual payments of 90"],[20,"\n","24:\"2bfx\"|36:131"],[20,"cashflows = [1000, -90, -90, -90, -90]"],[20,"\n","24:\"uPLZ\"|36:131"],[20,"list(itertools.accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt))"],[20,"\n","24:\"nabF\"|36:131"],[20,"[1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001]"],[20,"\n","24:\"ieUs\"|36:131"],[20,"\n","24:\"yK2C\"|36:131"],[20,"#Chaotic recurrence relation "],[20,"\n","24:\"poxx\"|36:131"],[20,"#https://en.wikipedia.org/wiki/Logistic_map"],[20,"\n","24:\"XR8D\"|36:131"],[20,"logistic_map = lambda x, _:? r * x * (1 - x)"],[20,"\n","24:\"UxZx\"|36:131"],[20,"r = 3.8"],[20,"\n","24:\"fJd3\"|36:131"],[20,"x0 = 0.4"],[20,"\n","24:\"G5Yw\"|36:131"],[20,"inputs = repeat(x0, 36)? ? ?# only the initial value is used"],[20,"\n","24:\"xY08\"|36:131"],[20,"[format(x, '.2f') for x in accumulate(inputs, logistic_map)]"],[20,"\n","24:\"Z9j6\"|36:131"],[20,"['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63',"],[20,"\n","24:\"ow7l\"|36:131"],[20," '0.88', '0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57',"],[20,"\n","24:\"nxBR\"|36:131"],[20," '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32',"],[20,"\n","24:\"IFBP\"|36:131"],[20," '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']"],[20,"\n","24:\"D0YK\"|36:131"],[20,"\n","24:\"eUhF\"|36:131"],[20,"'''在迭代器起始位置添加一個(gè)元素, 方法不變, 返回累計(jì)匯總值'''"],[20,"\n","24:\"xhCa\"|36:131"],[20,"list(itertools.accumulate([1, 2, 3, 4, 5], initial=100))"],[20,"\n","24:\"dcxW\"|36:131"],[20,"# [100, 101, 103, 106, 110, 115]"],[20,"\n","24:\"td37\"|36:131"],[20,"\n","24:\"kZjR\"|36:131"],[20,"'''在迭代器起始位置添加一個(gè)元素, 方法修改為計(jì)算累計(jì)的乘積'''"],[20,"\n","24:\"RSeD\"|36:131"],[20,"list(itertools.accumulate([1, 2, 3, 4, 5], lambda x, y: x * y, initial=10))"],[20,"\n","24:\"flSm\"|36:131"],[20,"#[10, 10, 20, 60, 240, 1200]"],[20,"\n","24:\"jL8j\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"1ypc\"|7:3"],[20,"4.2 ","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"chain()","0:\"%23ff0000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"mzuQ\"|32:2|7:3"],[20,"作用:","0:\"%23000000\"|27:\"10\"|31:2|8:1"],[20,"chain?接收多個(gè)可迭代對(duì)象作為參數(shù),將它們『連接』起來,作為一個(gè)新的迭代器返回。","27:\"10\""],[20,"\n","24:\"JCZZ\"|7:3"],[20,"語法:chain(iterable1,?iterable2,?iterable3,?...)","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"siSl\"|7:3"],[20," ","27:\"10\"|31:2"],[20,"\n","24:\"IFdQ\"|7:3"],[20,"list(itertools.chain([1, 2, 3], ('A', 'B', 'C'), {'一', '二', '三'}))"],[20,"\n","24:\"3qC1\"|36:131"],[20,"[1, 2, 3, 'A', 'B', 'C', '二', '一', '三']"],[20,"\n","24:\"UNs1\"|36:131"],[20,"\n","24:\"O73V\"|36:131"],[20,"list(itertools.chain( 'ABC', 'DEF'))"],[20,"\n","24:\"SBwU\"|36:131"],[20,"['A', 'B', 'C', 'D', 'E', 'F']"],[20,"\n","24:\"fYM6\"|36:131"],[20,"4.3?chain.from_iterable","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"5dxc\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"與?itertools.chain()?函數(shù)類似,但是參數(shù)是一個(gè)可迭代對(duì)象,將這個(gè)可迭代對(duì)象中元素一一添加到新迭代器中,如果元素是一個(gè)可迭代對(duì)象,那么會(huì)將這個(gè)元素內(nèi)的元素一一添加到新迭代器中。小編自己的理解就是迭代器降維。","27:\"10\""],[20,"\n","24:\"rSKv\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|8:1"],[20,"itertools.chain.from_iterable(iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2"],[20,"\n","24:\"ghDp\"|7:3"],[20,"'''將二維迭代器降維'''"],[20,"\n","24:\"gItH\"|36:131"],[20,"temp = itertools.chain.from_iterable(['1', ['2', '3'], ('4', '5')])"],[20,"\n","24:\"YCDz\"|36:131"],[20,"print(list(temp))"],[20,"\n","24:\"sl6Y\"|36:131"],[20,"# ['1', '2', '3', '4', '5']"],[20,"\n","24:\"0z3H\"|36:131"],[20,"\n","24:\"Es2L\"|36:131"],[20,"'''只能降一層維度, 三維將至二維'''"],[20,"\n","24:\"eifK\"|36:131"],[20,"temp = itertools.chain.from_iterable(['1', ['2', '3'], ('4', ['5', '6'])])"],[20,"\n","24:\"8VtU\"|36:131"],[20,"print(list(temp))"],[20,"\n","24:\"X9K3\"|36:131"],[20,"# ['1', '2', '3', '4', ['5', '6']]"],[20,"\n","24:\"4lSc\"|36:131"],[20,"PS:?迭代器維度概念可以理解為,整個(gè)迭代器中的元素都不是迭代器類型的就是一維,迭代器中的元素有是迭代器的就是二維,迭代器中的元素有是迭代器的,然后這個(gè)迭代器中還有元素是迭代器的就是三維,依此類推。","27:\"10\"|31:2"],[20,"\n","24:\"uani\"|7:3"],[20," ","27:\"10\""],[20,"\n","24:\"FvXs\"|7:3"],[20,"4.4 compress","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"EMA7\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"創(chuàng)建一個(gè)迭代器,將?data?中經(jīng)過?selectors?真值測(cè)試為?True?的元素保留。當(dāng)兩個(gè)可迭代對(duì)象中的某一個(gè)到達(dá)末尾時(shí)執(zhí)行停止,返回最終結(jié)果。","27:\"10\""],[20,"\n","24:\"OoSs\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|8:1"],[20,"compress(data,?selectors)","0:\"%2337d9f0\"|27:\"10\""],[20,"\n","24:\"mbu1\""],[20,"data: 可迭代對(duì)象, 包含所需的數(shù)據(jù)","27:\"10\""],[20,"\n","24:\"KWAn\"|27:\"10\"|bullet-id:\"IgOu\"|bullet:\"ring\""],[20,"selectors: 可迭代對(duì)象, 真值測(cè)試數(shù)據(jù)","27:\"10\""],[20,"\n","24:\"KZj3\"|27:\"10\"|bullet-id:\"IgOu\"|bullet:\"ring\""],[20,"for each in itertools.compress('abcd', [1, 0, 1, 0]):"],[20,"\n","24:\"6Bzq\"|36:131"],[20,"? ? print (each)"],[20,"\n","24:\"CAdb\"|36:131"],[20,"a"],[20,"\n","24:\"vMei\"|36:131"],[20,"c"],[20,"\n","24:\"32cK\"|36:131"],[20,"'''只判斷前三個(gè)元素, 并且索引值為 0 和 2 的元素會(huì)保留到新迭代器中并返回'''"],[20,"\n","24:\"OKhn\"|36:131"],[20,"temp = itertools.compress(['A', 'B', 'C', 'D'], [1, 0, 1])"],[20,"\n","24:\"z3a3\"|36:131"],[20,"list(temp)"],[20,"\n","24:\"guei\"|36:131"],[20,"# ['A', 'C']"],[20,"\n","24:\"2Nnn\"|36:131"],[20,"4.5 dropwhile","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"GLHK\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"直到predicate為真,就返回iterable剩下的數(shù)據(jù), 否則drop掉 ","27:\"10\"|31:2"],[20,"\n","24:\"zGHB\""],[20,"語法:","27:\"10\"|31:2|8:1"],[20,"itertools.dropwhile(predicate, iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"JJd5\"|7:3"],[20,"for each in itertools.dropwhile(lambda x: x<5, [2,1,6,8,2,1]):"],[20,"\n","24:\"qRkw\"|36:131"],[20,"? ? print(each)"],[20,"\n","24:\"JKm9\"|36:131"],[20,"6"],[20,"\n","24:\"BFbA\"|36:131"],[20,"8"],[20,"\n","24:\"gIZh\"|36:131"],[20,"2"],[20,"\n","24:\"vWUY\"|36:131"],[20,"1? ??"],[20,"\n","24:\"fCNU\"|36:131"],[20,"4.6 filterfalse","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"Y1Ix\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"創(chuàng)建一個(gè)迭代器,僅保留?iterable?中在?predicate?計(jì)算中為?False?的元素。如果?predicate?傳入的是?None,則相當(dāng)于傳入?bool,意思是做真值測(cè)試。","27:\"10\""],[20,"\n","24:\"59rS\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"itertools.filterfalse(predicate, iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2"],[20,"\n","24:\"OKgv\"|7:3"],[20,"predicate: 只需要一個(gè)參數(shù)的函數(shù)","27:\"10\""],[20,"\n","24:\"zWhY\"|27:\"10\"|7:3|bullet-id:\"5OIT\"|bullet:\"ring\""],[20,"iterable: 可迭代對(duì)象","27:\"10\""],[20,"\n","24:\"hoqx\"|27:\"10\"|7:3|bullet-id:\"5OIT\"|bullet:\"ring\""],[20," ","27:\"10\""],[20,"\n","24:\"Ddxt\"|7:3"],[20,"'''元素的值減2小于等于0的為True'''"],[20,"\n","24:\"X6Qa\"|36:131"],[20,"temp = itertools.filterfalse(lambda x: x - 2 <= 0, [1, 2, 0, 3, 1])"],[20,"\n","24:\"O2t2\"|36:131"],[20,"print(list(temp))"],[20,"\n","24:\"cbie\"|36:131"],[20,"# [3]"],[20,"\n","24:\"OUMj\"|36:131"],[20,"\n","24:\"83mQ\"|36:131"],[20,"'''真值測(cè)試'''"],[20,"\n","24:\"k5qo\"|36:131"],[20,"temp = itertools.filterfalse(None, [1, 2, 0, 3, 1])"],[20,"\n","24:\"uP0S\"|36:131"],[20,"print(list(temp))"],[20,"\n","24:\"c6Kt\"|36:131"],[20,"# [0]"],[20,"\n","24:\"TQzi\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"o0G4\"|32:2|7:3"],[20,"4.7 groupby","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"XO55\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"返回一組(key,itera),key為iterable的值,itera為等于key的所有項(xiàng)","27:\"10\"|31:2"],[20,"\n","24:\"0tLR\""],[20,"語法:itertools.groupby(iterable[,key])","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"278m\"|7:3"],[20,"for key, vale in itertools.groupby('aabbbc'):"],[20,"\n","24:\"5zRm\"|36:131"],[20,"? ? print( key, list(vale))"],[20,"\n","24:\"EnmO\"|36:131"],[20,"a ['a', 'a']"],[20,"\n","24:\"1TTK\"|36:131"],[20,"b ['b', 'b', 'b']"],[20,"\n","24:\"3Lga\"|36:131"],[20,"c ['c']"],[20,"\n","24:\"oAt7\"|36:131"],[20,"4.8 islice","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"8O1p\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"相當(dāng)于迭代器方式的切片操作 ","27:\"10\"|31:2"],[20,"\n","24:\"ZuuR\""],[20,"語法:itertools.islice(iterable, start,stop[,step])","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"WiDy\"|7:3"],[20,"for each in itertools.islice('abcdefg', 1, 4, 2):"],[20,"\n","24:\"wLW4\"|36:131"],[20,"? ? print(each)? ?"],[20,"\n","24:\"17FL\"|36:131"],[20,"b"],[20,"\n","24:\"nyME\"|36:131"],[20,"d? ??"],[20,"\n","24:\"eIKk\"|36:131"],[20,"4.9 ","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"starmap()","0:\"%23ff0000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"1DLP\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"返回function(iter)的值,iter為iterable的元素 ","27:\"10\"|31:2"],[20,"\n","24:\"OsNf\""],[20,"語法:itertools.starmap(function,iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"tegR\"|7:3"],[20,"for each in itertools.starmap(lambda x, y: x * y, [(1, 2), (3, 4)]):"],[20,"\n","24:\"3GEB\"|36:131"],[20,"? ? print(each)? ?"],[20,"\n","24:\"jMh2\"|36:131"],[20,"2"],[20,"\n","24:\"z4TN\"|36:131"],[20,"12"],[20,"\n","24:\"x4xD\"|36:131"],[20,"4.10?","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"takewhile()","0:\"%23ff0000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"ziF3\"|32:2|7:3"],[20,"作用:","27:\"10\"|31:2|8:1"],[20,"創(chuàng)建一個(gè)迭代器,將?iterable?中的元素當(dāng)作?function?的參數(shù)計(jì)算,與?dropwhile()?函數(shù)恰恰相反,當(dāng)結(jié)果的布爾值為?True?時(shí),其元素添加到新迭代器中, 直到有元素的計(jì)算結(jié)果為?False?時(shí),此元素與之后的元素全部拋棄。","27:\"10\""],[20,"\n","24:\"Kuz3\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|31:2|8:1"],[20,"itertools.takewhile(predicate,iterable)","0:\"%2337d9f0\"|27:\"10\"|31:2"],[20,"\n","24:\"SkEH\"|7:3"],[20,"for each in itertools.takewhile(lambda x: x < 5, [1, 3, 5, 6]):"],[20,"\n","24:\"Hw9d\"|36:131"],[20,"print(each)"],[20,"\n","24:\"UrXj\"|36:131"],[20,"1"],[20,"\n","24:\"Wase\"|36:131"],[20,"3? ??"],[20,"\n","24:\"71pt\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"jUIp\"|7:3"],[20,"4.11 tee","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"\n","24:\"Jvps\"|32:2|7:3"],[20,"作用:","27:\"10\"|8:1"],[20,"從一個(gè)可迭代對(duì)象中分裂出?n?個(gè)獨(dú)立的可迭代對(duì)象并返回。","27:\"10\""],[20,"\n","24:\"60ty\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|8:1"],[20,"itertools.tee(iterable, n=2)","0:\"%2337d9f0\"|27:\"10\""],[20,"\n","24:\"bZwo\""],[20,"for i in itertools.tee([1, 2, 3, 4, 5, 6], 2):"],[20,"\n","24:\"dtwU\"|36:131"],[20," print(list(i))"],[20,"\n","24:\"EhO1\"|36:131"],[20,"# [1, 2, 3, 4, 5, 6]"],[20,"\n","24:\"J7Dr\"|36:131"],[20,"# [1, 2, 3, 4, 5, 6]"],[20,"\n","24:\"2q5p\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"0GH0\"|32:2|7:3"],[20,"4.12 ","0:\"%23ff0000\"|27:\"10\"|31:2"],[20,"zip_longest","0:\"%23ff0000\"|27:\"10\""],[20,"\n","24:\"GLui\"|32:2"],[20,"作用:","27:\"10\"|8:1"],[20,"創(chuàng)建一個(gè)迭代器,從所有傳入的可迭代對(duì)象中抽取一個(gè)元素,將它們組合成一個(gè)元組,然后添加到迭代器中。","0:\"%2324292e\"|27:\"10\"|31:2"],[20,"\n","24:\"XmF5\""],[20,"語法:","0:\"%2337d9f0\"|27:\"10\"|8:1"],[20,"itertools.zip_longest(*iterables, fillvalue=None)","0:\"%2337d9f0\"|27:\"10\""],[20,"\n","24:\"MdGK\""],[20,"iterables: 一個(gè)或多個(gè)可迭代對(duì)象","27:\"10\""],[20,"\n","24:\"9N1j\"|27:\"10\"|7:3|bullet-id:\"LJW0\"|bullet:\"ring\""],[20,"fillvalue: 關(guān)鍵字參數(shù), 填充值, 默認(rèn)為 None ","27:\"10\""],[20,"\n","24:\"98E8\"|27:\"10\"|7:3|bullet-id:\"LJW0\"|bullet:\"ring\""],[20,"list(itertools.zip_longest('xyz', '123456', '小伍哥', fillvalue='*'))"],[20,"\n","24:\"b9lT\"|36:131"],[20,"[('x', '1', '小'),"],[20,"\n","24:\"DBp1\"|36:131"],[20,"?('y', '2', '伍'),"],[20,"\n","24:\"MREn\"|36:131"],[20,"?('z', '3', '哥'),"],[20,"\n","24:\"1isB\"|36:131"],[20,"?('*', '4', '*'),"],[20,"\n","24:\"LFlG\"|36:131"],[20,"?('*', '5', '*'),"],[20,"\n","24:\"xwmG\"|36:131"],[20,"?('*', '6', '*')]"],[20,"\n","24:\"8db7\"|36:131"],[20," ","27:\"10\""],[20,"\n","24:\"jIBc\"|7:3"],[20,"五、總 結(jié)","0:\"%23000000\"|27:\"10\"|31:2|8:1"],[20,"\n","24:\"DG1K\"|32:1"],[20,"本文對(duì)itertools函數(shù)庫中的函數(shù)進(jìn)行了分析,并與常用方法做了對(duì)比,看得出來,如果能恰當(dāng)應(yīng)用itertools中的迭代器函數(shù),會(huì)使我們的代碼顯得更加具備Python風(fēng)格。","27:\"10\""],[20,"\n","24:\"PYHu\""],[20,"\n","24:\"Lu92\""],[20,"迭代器(生成器)在Python中是一種很常用也很好用的數(shù)據(jù)結(jié)構(gòu),比起列表(list)來說,迭代器最大的優(yōu)勢(shì)就是延遲計(jì)算,按需使用,從而提高開發(fā)體驗(yàn)和運(yùn)行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。而通過iter函數(shù)把列表對(duì)象轉(zhuǎn)化為迭代器對(duì)象又有點(diǎn)多此一舉,這時(shí)候我們今天的主角itertools就該上場(chǎng)了。","0:\"%23121212\"|27:\"10\"|31:2"],[20,"\n","24:\"a3Lj\""],[20,"\n","24:\"fFsu\""],[20,"itertools中的函數(shù)大多是返回各種迭代器對(duì)象,其中很多函數(shù)的作用我們平時(shí)要寫很多代碼才能達(dá)到,而在運(yùn)行效率上反而更低,畢竟人家是系統(tǒng)庫","0:\"%23121212\"|27:\"10\"|31:2"],[20,"\n\n"],[20,"大概就總結(jié)到這里,不過老實(shí)說Python的各種語言特性和庫還是要多用才能熟練,最終達(dá)到隨手拈來的程度,裝逼的說就是由術(shù)入道。","0:\"%23121212\"|27:\"10\"|31:2"],[20,"\n","24:\"dZz2%2CstC8%2CO8x0\""],[20,"\n","24:\"XS4R\""],[20,"\n","24:\"aCtC\""],[20,"\n","24:\"XSCR\""],[20,"六、參考文檔","27:\"10\""],[20,"\n","24:\"WX42\"|32:1"],[20,"itertools -- 高效迭代器│Python標(biāo)準(zhǔn)庫","27:\"10\"|31:2"],[20,"\n","24:\"XYca\""],[20,"https://mp.weixin.qq.com/s/IGXphM70I9h4ayCn5nmFQA","16:\"https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FIGXphM70I9h4ayCn5nmFQA\"|27:\"10\""],[20,"\n","24:\"mmaY\""],[20,"\n","24:\"aUhj\""],[20,"python標(biāo)準(zhǔn)庫系列教程(一)——itertools","27:\"10\""],[20,"\n","24:\"Q1Af\""],[20,"https://mp.weixin.qq.com/s/U3UsIOFZ5iQRJlPSSNh0mQ","16:\"https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FU3UsIOFZ5iQRJlPSSNh0mQ\"|27:\"10\""],[20,"\n","24:\"pRyT\""],[20,"\n","24:\"sHXx\""],[20,"Python標(biāo)準(zhǔn)庫系列教程——functools","27:\"10\"|31:2"],[20,"\n","24:\"mafX\""],[20,"https://mp.weixin.qq.com/s/WeOYKMKVnQ6JTjIJZ-1pxA","16:\"https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FWeOYKMKVnQ6JTjIJZ-1pxA\"|27:\"10\""],[20,"\n","24:\"cUAc\""],[20," ","27:\"10\"|31:2"]]">

        本文目錄

        一、模塊概述

        二、組合生成器

        2.1 product

        2.2 permutations

        2.3 combinations

        2.4 combinations_with_replacement

        三、無限迭代器

        3.1 count

        3.2 cycle

        3.3 repeat

        四、有限迭代器

        4.1 accumulate

        4.2 chain

        4.3 chain.from_iterable

        4.4 compress

        4.5 dropwhile

        4.6 filterfalse

        4.7 groupby

        4.8 islice

        4.9 starmap

        4.10 takewhile

        4.11 tee

        4.12 zip_longest

        五、總結(jié)

        ?

        ?

        一、模塊概述

        Functional tools for creating and using iterators,為高效循環(huán)而創(chuàng)建迭代器的函數(shù)。本模塊標(biāo)準(zhǔn)化了一個(gè)快速、高效利用內(nèi)存的核心工具集,這些工具本身或組合都很有用。它們一起形成了“迭代器代數(shù)”,這使得在純Python中有可能創(chuàng)建簡(jiǎn)潔又高效的專用工具。

        permutations函數(shù)可以求序列的排列,combinations函數(shù)可以求序列的組合,除了這兩個(gè)函數(shù)外,itertools還有相當(dāng)多的功能,它主要是提供迭代類的操作。

        迭代器的特點(diǎn)是:惰性求值(Lazy evaluation),即只有當(dāng)?shù)聊硞€(gè)值時(shí),它才會(huì)被計(jì)算,這個(gè)特點(diǎn)使得迭代器特別適合于遍歷大文件或無限集合等,因?yàn)槲覀儾挥靡淮涡詫⑺鼈兇鎯?chǔ)在內(nèi)存中。itertools 模塊提供的迭代器函數(shù)有以下幾種類型:

        組合生成器:序列的排列、組合,求序列的笛卡兒積等,比如product可以生成兩個(gè)序列的笛卡爾積;

        無限迭代器:生成一個(gè)無限序列,比如count函數(shù)能生成自然數(shù)序列 1, 2, 3, 4, ...

        有限迭代器:接收一個(gè)或多個(gè)序列(sequence)作為參數(shù),進(jìn)行組合、分組和過濾等,比如chain函數(shù),能組合多個(gè)序列

        print(dir(itertools))['__doc__', '__loader__', '__name__', '__package__', '__spec__', '_grouper', '_tee', '_tee_dataobject', 'accumulate', 'chain',  'combinations', 'combinations_with_replacement', 'compress',  'count', 'cycle', 'dropwhile', 'filterfalse', 'groupby', 'islice',  'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee', ?'zip_longest']

        總之該模塊為Python為創(chuàng)建自定義迭代器提供了非常好用的模塊——itertools。由itertools提供的工具通常都很快速而且節(jié)省內(nèi)存。你可以利用這些組成部分去創(chuàng)建自己獨(dú)有的迭代器以完成高效的循環(huán)

        官方參考文檔:https://docs.python.org/zh-cn/3/library/itertools.html

        ?


        二、排列組合迭代器

        迭代器

        實(shí)參

        結(jié)果

        product()

        p, q, ... [repeat=1]

        笛卡爾積,相當(dāng)于嵌套的for循環(huán)

        permutations()

        p[, r]

        長度r元組,所有可能的排列,無重復(fù)元素

        combinations()

        p, r

        長度r元組,有序,無重復(fù)元素

        combinations_with_replacement()

        p, r

        長度r元組,有序,元素可重復(fù)

        ?

        例子

        結(jié)果

        product('ABCD',?repeat=2)

        AA?AB?AC?AD?BA?BB?BC?BD?CA?CB?CC?CD?DA?DB?DC?DD

        permutations('ABCD',?2)

        AB?AC?AD?BA?BC?BD?CA?CB?CD?DA?DB?DC

        combinations('ABCD',?2)

        AB?AC?AD?BC?BD?CD

        combinations_with_replacement('ABCD',?2)

        AA?AB?AC?AD?BB?BC?BD?CC?CD?DD

        2.1 product

        作用:用于求多個(gè)可迭代對(duì)象的笛卡爾積,它跟嵌套的 for 循環(huán)等價(jià)

        語法:itertools.product(iter1, iter2, ... iterN, [repeat=1])

        for each in itertools.product('ABCD', 'XY'):    print(each)('A', 'X')('A', 'Y')('B', 'X')('B', 'Y')('C', 'X')('C', 'Y')('D', 'X')('D', 'Y')

        for each in itertools.product('abc', repeat=2): print (each)('a', 'a')('a', 'b')('a', 'c')('b', 'a')('b', 'b')('b', 'c')('c', 'a')('c', 'b')('c', 'c')

        2.2 permutations

        作用:返回長度為r的排列

        語法:itertools.permutations(iteravle[,r])

        • iterable: 可迭代對(duì)象

        • r: 關(guān)鍵字參數(shù), 新元素的長度, 默認(rèn)為 None, 即為新元素的長度就是元素個(gè)數(shù)

        將 iterable 中的元素以長度為 r 進(jìn)行排列。每個(gè)排列組合生成一個(gè)元組并添加到新迭代器中。排列時(shí),排列順序是按照 iterable 中元素的順序進(jìn)行的。因此,未排序的 iterable 和已排序的 iterable 排列后的結(jié)果是不同的。

        若 iterable 中有相同值的元素,但是它們的位置是不同的,排列時(shí)也就會(huì)會(huì)認(rèn)為它們是不同的。注意: 排列即為數(shù)學(xué)上的排列,從 n 個(gè)元素中取出 m 個(gè)元素的無重復(fù)排列或直線排列。

        for each in itertools.permutations('abc', 2):     print (each)('a', 'b')('a', 'c')('b', 'a')('b', 'c')('c', 'a')('c', 'b')

        2.3 combinations

        作用:返回指定長度的組合

        語法: itertools.combinations(iterable, r)

        iterable: 可迭代對(duì)象r: 新元素的長度for each in itertools.combinations('abc', 2):    print (each)('a', 'b')('a', 'c')('b', 'c')將 iterable 中的元素以長度為 r 進(jìn)行組合。每個(gè)排列組合生成一個(gè)元組并添加到新迭代器中。與 permutations() 函數(shù)基本一致,但是 combinations() 函數(shù)會(huì)過濾掉元素值一致的元組。'''相比于排列,組合會(huì)篩選掉元素值一樣的元組'''list(itertools.combinations('ABC', 2))[('A', 'B'), ('A', 'C'), ('B', 'C')]

        '''排列對(duì)照組'''list(itertools.permutations('ABC', 2))[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

        2.4 combinations_with_replacement

        作用:返回指定長度的組合,組合內(nèi)元素可重復(fù)

        語法:itertools.combinations_with_replacement(iterable, r)

        • iterable: 可迭代對(duì)象

        • r: 關(guān)鍵字參數(shù), 新元素的長度, 默認(rèn)為 None, 即為新元素的長度就是元素個(gè)數(shù)

        for each in itertools.combinations_with_replacement('abc', 2):    print (each)('a', 'a')('a', 'b')('a', 'c')('b', 'b')('b', 'c')('c', 'c')


        三、無限迭代器

        有三個(gè)無限迭代器,當(dāng)你使用它們的時(shí)候,你要知道何時(shí)去跳出這個(gè)循環(huán),不然你將陷入無限循環(huán)之中,在生產(chǎn)數(shù)字或者遍歷事先不知道長度的數(shù)據(jù)時(shí)非常有用。

        迭代器

        實(shí)參

        結(jié)果

        示例

        count()

        start, [step]

        start,start+step,start+2*step, ...

        count(10)?-->?10?11?12?13?14?...

        cycle()

        p

        p0, p1, ... plast, p0, p1, ...

        cycle('ABCD')?-->?A?B?C?D?A?B?C?D?...

        repeat()

        elem [,n]

        elem, elem, elem, ... 重復(fù)無限次或n次

        repeat(10,?3)?-->?10?10?10

        3.1 count()

        作用:返回以start開始,step遞增的序列,無限遞增

        語法:itertools.count(start=0,step=1)

        for each in itertools.count(start=0, step=2):    print (each)12...100003

        '''小應(yīng)用, 當(dāng)取到第三個(gè) A 時(shí)停止'''test_str = ''for i in itertools.cycle('ABC'): test_str += i if test_str.count('A') >= 3: breakprint(test_str)# ABCABCA

        3.2 cycle()

        作用:將迭代器進(jìn)行無限迭代

        語法:itertools.cycle(iterable)

        for each in itertools.cycle('ab'):    print(eachab...ba

        3.3 repeat()

        作用:不停的返回object對(duì)象,如果指定了times,則返回times次

        語法:itertools.repeat(object,[,times])

        for each in itertools.repeat('ab', 2):print(each)abab   

        ?

        四、有限迭代器

        迭代器

        實(shí)參

        結(jié)果

        示例

        accumulate()

        p [,func]

        p0, p0+p1, p0+p1+p2, ...

        accumulate([1,2,3,4,5])?-->?1?3?6?10?15

        chain()

        p, q, ...

        p0, p1, ... plast, q0, q1, ...

        chain('ABC',?'DEF')?-->?A?B?C?D?E?F

        chain.from_iterable()

        iterable

        p0, p1, ... plast, q0, q1, ...

        chain.from_iterable(['ABC',?'DEF'])?-->?A?B?C?D?E?F

        compress()

        data, selectors

        (d[0] if s[0]), (d[1] if s[1]), ...

        compress('ABCDEF',?[1,0,1,0,1,1])?-->?A?C?E?F

        dropwhile()

        pred, seq

        seq[n], seq[n+1], ... 從pred首次真值測(cè)試失敗開始

        dropwhile(lambda?x:?x<5,?[1,4,6,4,1])?-->?6?4?1

        filterfalse()

        pred, seq

        seq中pred(x)為假值的元素,x是seq中的元素。

        filterfalse(lambda?x:?x%2,?range(10))?-->?0?2?4?6?8

        groupby()

        iterable[, key]

        根據(jù)key(v)值分組的迭代器


        islice()

        seq, [start,] stop [, step]

        seq[start:stop:step]中的元素

        islice('ABCDEFG',?2,?None)?-->?C?D?E?F?G

        starmap()

        func, seq

        func(*seq[0]), func(*seq[1]), ...

        starmap(pow,?[(2,5),?(3,2),?(10,3)])?-->?32?9?1000

        takewhile()

        pred, seq

        seq[0], seq[1], ..., 直到pred真值測(cè)試失敗

        takewhile(lambda?x:?x<5,?[1,4,6,4,1])?-->?1?4

        tee()

        it, n

        it1, it2, ... itn 將一個(gè)迭代器拆分為n個(gè)迭代器


        zip_longest()

        p, q, ...

        (p[0], q[0]), (p[1], q[1]), ...

        zip_longest('ABCD',?'xy',?fillvalue='-')?-->?Ax?By?C-?D-

        4.1 accumulate()

        作用:創(chuàng)建一個(gè)迭代器,返回累積匯總值或其他雙目運(yùn)算函數(shù)的累積結(jié)果值(通過可選的 func 參數(shù)指定),,若傳入 func,則按照 func 中的方法執(zhí)行。

        語法:itertools.accumulate(iterable[, func, *, initial=None])

        • iterable: 可迭代對(duì)象

        • func: 帶有兩個(gè)參數(shù)的函數(shù), 可選參數(shù),func 參數(shù)有幾種用法。它可以被設(shè)為 min()?最終得到一個(gè)最小值,或者設(shè)為 max()?最終得到一個(gè)最大值,或設(shè)為 operator.mul()?最終得到一個(gè)乘積。攤銷表可通過累加利息和支付款項(xiàng)得到。給iterable設(shè)置初始值并只將參數(shù) func 設(shè)為累加總數(shù)可以對(duì)一階?遞歸關(guān)系?建模。

        • initial: 關(guān)鍵字參數(shù), 默認(rèn)為 None, 若此參數(shù)傳參, 則此參數(shù)作為 iterable 的第一個(gè)元素

        '''默認(rèn)情況, 返回累計(jì)匯總值'''list(itertools.accumulate([1, 2, 3, 4, 5]))[1, 3, 6, 10, 15]

        '''方法修改為計(jì)算累計(jì)的乘積'''import operator #該模塊輸出一系列對(duì)應(yīng)Python內(nèi)部操作符的函數(shù)data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]list(itertools.accumulate(data, operator.mul)) [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0]

        '''方法修改為計(jì)算累計(jì)的最大值'''list(itertools.accumulate(data, max))[3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

        # Amortize a 5% loan of 1000 with 4 annual payments of 90cashflows = [1000, -90, -90, -90, -90]list(itertools.accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt))[1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001]

        #Chaotic recurrence relation #https://en.wikipedia.org/wiki/Logistic_maplogistic_map = lambda x, _: r * x * (1 - x)r = 3.8x0 = 0.4inputs = repeat(x0, 36) # only the initial value is used[format(x, '.2f') for x in accumulate(inputs, logistic_map)]['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63', '0.88', '0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57', '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32', '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']

        '''在迭代器起始位置添加一個(gè)元素, 方法不變, 返回累計(jì)匯總值'''list(itertools.accumulate([1, 2, 3, 4, 5], initial=100))# [100, 101, 103, 106, 110, 115]
        '''在迭代器起始位置添加一個(gè)元素, 方法修改為計(jì)算累計(jì)的乘積'''list(itertools.accumulate([1, 2, 3, 4, 5], lambda x, y: x * y, initial=10))#[10, 10, 20, 60, 240, 1200]

        4.2 chain()

        作用:chain?接收多個(gè)可迭代對(duì)象作為參數(shù),將它們『連接』起來,作為一個(gè)迭代器返回。

        語法:chain(iterable1,?iterable2,?iterable3,?...)

        list(itertools.chain([1, 2, 3], ('A', 'B', 'C'), {'一', '二', '三'}))[1,?2,?3,?'A',?'B',?'C',?'二',?'一',?'三']list(itertools.chain( 'ABC', 'DEF'))['A', 'B', 'C', 'D', 'E', 'F']

        4.3?chain.from_iterable

        作用:與 itertools.chain()?函數(shù)類似,但是參數(shù)是一個(gè)可迭代對(duì)象,將這個(gè)可迭代對(duì)象中元素一一添加到新迭代器中,如果元素是一個(gè)可迭代對(duì)象,那么會(huì)將這個(gè)元素內(nèi)的元素一一添加到新迭代器中。小編自己的理解就是迭代器降維。

        語法:itertools.chain.from_iterable(iterable)

        '''將二維迭代器降維'''temp = itertools.chain.from_iterable(['1', ['2', '3'], ('4', '5')])print(list(temp))# ['1', '2', '3', '4', '5']

        '''只能降一層維度, 三維將至二維'''temp = itertools.chain.from_iterable(['1', ['2', '3'], ('4', ['5', '6'])])print(list(temp))# ['1', '2', '3', '4', ['5', '6']]

        PS:?迭代器維度概念可以理解為,整個(gè)迭代器中的元素都不是迭代器類型的就是一維,迭代器中的元素有是迭代器的就是二維,迭代器中的元素有是迭代器的,然后這個(gè)迭代器中還有元素是迭代器的就是三維,依此類推。

        4.4 compress

        作用:創(chuàng)建一個(gè)迭代器,將 data 中經(jīng)過 selectors 真值測(cè)試為 True 的元素保留。當(dāng)兩個(gè)可迭代對(duì)象中的某一個(gè)到達(dá)末尾時(shí)執(zhí)行停止,返回最終結(jié)果。

        語法:compress(data,?selectors)

        • data: 可迭代對(duì)象, 包含所需的數(shù)據(jù)

        • selectors: 可迭代對(duì)象, 真值測(cè)試數(shù)據(jù)

        for each in itertools.compress('abcd', [1, 0, 1, 0]):    print (each)ac'''只判斷前三個(gè)元素, 并且索引值為 0 和 2 的元素會(huì)保留到新迭代器中并返回'''temp = itertools.compress(['A', 'B', 'C', 'D'], [1, 0, 1])list(temp)# ['A', 'C']

        4.5 dropwhile

        作用:直到predicate為真,就返回iterable剩下的數(shù)據(jù), 否則drop掉

        語法:itertools.dropwhile(predicate, iterable)

        for each in itertools.dropwhile(lambda x: x<5, [2,1,6,8,2,1]):    print(each)6821    

        4.6 filterfalse

        作用:創(chuàng)建一個(gè)迭代器,僅保留 iterable 中在 predicate 計(jì)算中為 False 的元素。如果 predicate 傳入的是 None,則相當(dāng)于傳入 bool,意思是做真值測(cè)試。

        語法:itertools.filterfalse(predicate, iterable)

        • predicate: 只需要一個(gè)參數(shù)的函數(shù)

        • iterable: 可迭代對(duì)象

        '''元素的值減2小于等于0的為True'''temp = itertools.filterfalse(lambda x: x - 2 <= 0, [1, 2, 0, 3, 1])print(list(temp))#?[3]'''真值測(cè)試'''temp = itertools.filterfalse(None, [1, 2, 0, 3, 1])print(list(temp))# [0]

        4.7 groupby

        作用:返回一組(key,itera),key為iterable的值,itera為等于key的所有項(xiàng)

        語法:itertools.groupby(iterable[,key])

        for key, vale in itertools.groupby('aabbbc'):    print( key, list(vale))a ['a', 'a']b ['b', 'b', 'b']c ['c']

        4.8 islice

        作用:相當(dāng)于迭代器方式的切片操作

        語法:itertools.islice(iterable, start,stop[,step])

        for each in itertools.islice('abcdefg', 1, 4, 2):    print(each)   bd    

        4.9 starmap()

        作用:返回function(iter)的值,iter為iterable的元素

        語法:itertools.starmap(function,iterable)

        for each in itertools.starmap(lambda x, y: x * y, [(1, 2), (3, 4)]):    print(each)   212

        4.10?takewhile()

        作用:創(chuàng)建一個(gè)迭代器,將 iterable 中的元素當(dāng)作 function 的參數(shù)計(jì)算,與 dropwhile()?函數(shù)恰恰相反,當(dāng)結(jié)果的布爾值為 True 時(shí),其元素添加到新迭代器中, 直到有元素的計(jì)算結(jié)果為 False 時(shí),此元素與之后的元素全部拋棄。

        語法:itertools.takewhile(predicate,iterable)

        for each in itertools.takewhile(lambda x: x < 5, [1, 3, 5, 6]):print(each)13    

        4.11 tee

        作用:從一個(gè)可迭代對(duì)象中分裂出 n 個(gè)獨(dú)立的可迭代對(duì)象并返回。

        語法:itertools.tee(iterable, n=2)

        for i in itertools.tee([1, 2, 3, 4, 5, 6], 2):    print(list(i))# [1, 2, 3, 4, 5, 6]# [1, 2, 3, 4, 5, 6]

        4.12 zip_longest

        作用:創(chuàng)建一個(gè)迭代器,從所有傳入的可迭代對(duì)象中抽取一個(gè)元素,將它們組合成一個(gè)元組,然后添加到迭代器中。

        語法:itertools.zip_longest(*iterables, fillvalue=None)

        • iterables: 一個(gè)或多個(gè)可迭代對(duì)象

        • fillvalue: 關(guān)鍵字參數(shù), 填充值, 默認(rèn)為 None

        list(itertools.zip_longest('xyz', '123456', '小伍哥', fillvalue='*'))[('x', '1', '小'), ('y', '2', '伍'), ('z', '3', '哥'), ('*', '4', '*'), ('*', '5', '*'), ('*', '6', '*')]


        五、總 ? 結(jié)


        迭代器(生成器)在Python中是一種很常用也很好用的數(shù)據(jù)結(jié)構(gòu),比起列表(list)來說,迭代器最大的優(yōu)勢(shì)就是延遲計(jì)算,按需使用,從而提高開發(fā)體驗(yàn)和運(yùn)行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。而通過iter函數(shù)把列表對(duì)象轉(zhuǎn)化為迭代器對(duì)象又有點(diǎn)多此一舉,這時(shí)候我們今天的主角itertools就該上場(chǎng)了。

        ?

        itertools中的函數(shù)大多是返回各種迭代器對(duì)象,其中很多函數(shù)的作用我們平時(shí)要寫很多代碼才能達(dá)到,而在運(yùn)行效率上反而更低,大概就總結(jié)到這里,不過Python的各種語言特性和庫還是要多用才能熟練,最終達(dá)到隨手拈來的程度。

        往期精彩回顧





        本站qq群704220115,加入微信群請(qǐng)掃碼:

        瀏覽 45
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            色情片在线播放 | 性生大片免费观看性 | 国产精品自拍在线观看 | 91在线激情 | 操极品嫩穴 | 美女掰逼| 大鸡巴插逼逼 | japanese一级淫片 | 日本黄在线看 | 蜜桃无码视频小说网站 |