<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 4.5.?過濾列表 如你所知,Python 具有通過列表解析 ([第?3.6?節 “映射 list”](../native_data_types/mapping_lists.html "3.6.?映射 list")) 將列表映射到其它列表的強大能力。這種能力同過濾機制結合使用,使列表中的有些元素被映射的同時跳過另外一些元素。 過濾列表語法: ``` [`mapping-expression` for `element` in `source-list` if `filter-expression`] ``` 這是你所知所愛的[列表解析](../native_data_types/mapping_lists.html "3.6.?映射 list")的擴展。前三部分都是相同的;最后一部分,以 `if` 開頭的是過濾器表達式。過濾器表達式可以是返回值為真或者假的任何表達式 (在 Python 中是[幾乎任何東西](../native_data_types/lists.html#tip.boolean))。任何經過濾器表達式演算值為真的元素都可以包含在映射中。其它的元素都將忽略,它們不會進入映射表達式,更不會包含在輸出列表中。 ## 例?4.14.?列表過濾介紹 ``` >>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"] >>> [elem for elem in li if len(elem) > 1] ['mpilgrim', 'foo'] >>> [elem for elem in li if elem != "b"] ['a', 'mpilgrim', 'foo', 'c', 'd', 'd'] >>> [elem for elem in li if li.count(elem) == 1] ['a', 'mpilgrim', 'foo', 'c'] ``` | | | | --- | --- | | \[1\] | 這里的映射表達式很簡單 (只是返回每個元素的值),所以請把注意力集中到過濾器表達式上。由于 Python 會遍歷整個列表,它將對每個元素執行過濾器表達式。如果過濾器表達式演算值為真,該元素就會被映射,同時映射表達式的結果將包含在返回的列表中。這里,你過濾掉了所有單字符的字符串,留下了一個由長字符串構成的列表。 | | \[2\] | 這里你過濾掉了一個特定值 `b`。注意這個過濾器會過濾掉所有的 `b`,因為每次取出 `b`,過濾表達式都將為假。 | | \[3\] | `count` 是一個列表方法,返回某個值在列表中出現的次數。你可以認為這個過濾器將從列表中剔除重復元素,返回一個只包含了在原始列表中有著唯一值拷貝的列表。但并非如此,因為在原始列表中出現兩次的值 (在本例中,`b` 和 `d`) 被完全剔除了。從一個列表中排除重復值有多種方法,但過濾并不是其中的一種。 | 回到 `apihelper.py` 中的這一行: ``` methodList = [method for method in dir(object) if callable(getattr(object, method))] ``` 這行看上去挺復雜――確實也很復雜――但是基本結構都還是一樣的。整個過濾表達式返回一個列表,并賦值給 `methodList` 變量。表達式的前半部分是列表映射部分。映射表達式是一個和遍歷元素相同的表達式,因此它返回每個元素的值。``dir`(`object`)` 返回 `object` 對象的屬性和方法列表――你正在映射的列表。所以唯一新出現的部分就是在 `if` 后面的過濾表達式。 過濾表達式看上去很恐怖,其實不是。你已經知道了 [`callable`](built_in_functions.html#apihelper.builtin.callable "例?4.8.?callable 介紹")、[`getattr`](getattr.html#apihelper.getattr.intro "例?4.10.?getattr 介紹") 和 [`in`](../native_data_types/tuples.html#odbchelper.tuplemethods "例?3.16.?Tuple 沒有方法")。正如你在[前面的部分](getattr.html "4.4.?通過 getattr 獲取對象引用")中看到的,如果 `object` 是一個模塊,并且 `method` 是上述模塊中某個函數的名稱,那么表達式 `getattr(object, method)` 將返回一個函數對象。 所以這個表達式接收一個名為 `object` 的對象,然后得到它的屬性、方法、函數和其他成員的名稱列表,接著過濾掉我們不關心的成員。執行過濾行為是通過對每個屬性/方法/函數的名稱調用 `getattr` 函數取得實際成員的引用,然后檢查這些成員對象是否是可調用的,當然這些可調用的成員對象可能是方法或者函數,同時也可能是內置的 (比如列表的 `pop` 方法) 或者用戶自定義的 (比如 `odbchelper` 模塊的 `buildConnectionString` 函數)。這里你不用關心其它的屬性,如內置在每一個模塊中的 `__name__` 屬性。 ## 進一步閱讀 * _Python Tutorial_ 討論了[使用內置 `filter` 函數](http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000)過濾列表的另一種方式。
                  <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>

                              哎呀哎呀视频在线观看