<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 16.3.?重識列表過濾 你已經熟識了[應用列表解析來過濾列表](../power_of_introspection/filtering_lists.html "4.5.?過濾列表")。這里介紹的是達到相同效果的另一種令很多人感覺清晰的實現方法。 Python 有一個內建 `filter` 函數,它接受兩個參數:一個函數和一個列表,返回一個列表。\[12\] 作為第一個參數傳遞給 `filter` 的函數本身應接受一個參數,`filter` 返回的列表將會包含被傳入列表參數傳遞給 `filter` 所有可以令函數返回真 (true) 的元素。 都明白了嗎?并沒有聽起來那么難。 ## 例?16.7.?`filter` 介紹 ``` >>> def odd(n): ... return n % 2 ... >>> li = [1, 2, 3, 5, 9, 10, 256, -3] >>> filter(odd, li) [1, 3, 5, 9, -3] >>> [e for e in li if odd(e)] >>> filteredList = [] >>> for n in li: ... if odd(n): ... filteredList.append(n) ... >>> filteredList [1, 3, 5, 9, -3] ``` | | | | --- | --- | | \[1\] | `odd` 使用內建的取模 (mod) 函數 “`%`” 對于為奇數的 `n` 返回 `1`;為偶數的返回 `0`。 | | \[2\] | `filter` 接受兩個參數:一個函數 (`odd`) 和一個列表 (`li`)。它依列表循環為每個元素調用 `odd` 函數。如果 `odd` 返回的是真 (記住,Python 認為所有非零值為真),則該元素被放在返回列表中,如若不然則被過濾掉。結果是一個只包含原列表中奇數的列表,出現順序則和原列表相同。 | | \[3\] | 你可以通過遍歷的方式完成相同的工作,正如在 [第?4.5?節 “過濾列表”](../power_of_introspection/filtering_lists.html "4.5.?過濾列表") 中看到的。 | | \[4\] | 你可以通過 `for` 循環的方式完成相同的工作。取決于你的編程背景,這樣也許更“直接”,但是像 `filter` 函數這樣的實現方法更清晰。不但編寫簡單,而且易于讀懂。`for` 循環就好比近距離的繪畫:你可以看到所有的細節,但是或許你應該花幾秒時間退后幾步看一看圖畫的全景:“啊,你僅僅是要過濾列表!” | ## 例?16.8.?`regression.py` 中的 `filter` ``` files = os.listdir(path) test = re.compile("test\.py$", re.IGNORECASE) files = filter(test.search, files) ``` | | | | --- | --- | | \[1\] | 正如你在 [第?16.2?節 “找到路徑”](finding_the_path.html "16.2.?找到路徑") 中看到的,`path` 可能包括正在運行腳本的完全或者部分路徑名,或者當腳本運行自當前目錄時包含一個空的字符串。任何一種情況下,`files` 都會獲得正運行腳本所在目錄的文件名。 | | \[2\] | 這是一個預編譯的正則表達式。正如你在 [第?15.3?節 “重構”](../refactoring/refactoring.html "15.3.?重構")中看到的,如果你需要反復使用同一個正則表達式,你應該編譯它已獲得更快的性能。編譯后的對象將含有接受一個待尋找字符串作為參數的 `search` 方法。如果這個正則表達式匹配字符串,`search` 方法返回一個包含正則表達式匹配信息的 `Match` 對象;否則返回 `None`,這是 Python 空 (null) 值。 | | \[3\] | 對于 `files` 列表中的每個元素,你將會調用正則表達式編譯對象 `test` 的 `search` 方法。如果正則表達匹配,方法將會返回一個被 Python 認定為真 (true) 的 `Match` 對象;如果正則表達不匹配,`search` 方法將會返回被認定為假 (false) 的 `None`,元素將被排除。 | **歷史注釋.?**Python 2.0 早期的版本不包含 [列表解析](../native_data_types/mapping_lists.html "3.6.?映射 list"),因此不能 [以列表解析方式過濾](../power_of_introspection/filtering_lists.html "4.5.?過濾列表"),`filter` 函數是當時唯一的方法。即便是在引入列表解析的 2.0 版,有些人仍然鐘情于老派的 `filter` (和這章稍后將見到的它的伴侶函數 `map` )。兩種方法并存于世,使用哪種方法只是風格問題,`map` 和 `filter` 將在未來的 Python 版本中被廢止的討論尚無定論。 ## 例?16.9.?以列表解析法過濾 ``` files = os.listdir(path) test = re.compile("test\.py$", re.IGNORECASE) files = [f for f in files if test.search(f)] ``` | | | | --- | --- | | \[1\] | 這種方法將完成和 `filter` 函數完全相同的工作。哪種方法更清晰完全取決于你自己。 | ## Footnotes \[12\] 從技術層面上講,`filter` 的第二個參數可以是任意的序列,包括列表、元組以及定義了 `__getitem__` 特殊方法而能像列表一樣工作的自定義類。在可能情況下,`filter` 會返回與輸入相同的數據類型,也就是過濾一個列表返回一個列表,過濾一個元組返回一個元組。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看