<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之旅 廣告
                # Python 集 > 原文: [https://javabeginnerstutorial.com/python-tutorial/python-3-set-2/](https://javabeginnerstutorial.com/python-tutorial/python-3-set-2/) 在上一篇文章中,我們討論了 [Python 列表](https://javabeginnerstutorial.com/python-tutorial/python-list-2/)。但是 Python 3 `Set`是什么? 集合是*唯一*項目的*無序*集合。 **無序**表示這種類型的集合不允許建立索引,并且您無法像列表或元組那樣通過索引訪問它們的元素。 **唯一**表示即使將同一元素多次放入集合中,每個元素在集合中也只有一次。 自然,您可以像使用列表或元組一樣將字符串中的類型混合在一起。 ## 創建 Python 集 有一些方法可以創建集合。 基本版本是列出花括號(`{}`)之間的所有元素。 但是,最常見的用法是當您要從列表中刪除重復項時。 在這種情況下,您可以將列表轉換為集合,然后再次返回列表。 這將從集合的中間用法中將重復項從列表中刪除,您將再次擁有列表。 為此,使用`set`函數,該函數需要一個可迭代的參數。 ```py >>> A = {1,2,3,4,5} >>> A {1, 2, 3, 4, 5} >>> B = set((1,2,3,4,5)) >>> B {1, 2, 3, 4, 5} >>> C = set([1,2,5,4,3,4,5]) >>> C {1, 2, 3, 4, 5} >>> D = set(1,2,3,4,5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: set expected at most 1 arguments, got 5 >>> D = set(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable ``` 如您所見,您不能將可變數量的參數作為參數或不可迭代的參數添加。 **但是!** 您可以傳遞字符串作為 set 函數的參數,因為(您可能還記得),字符串是 Python 中的字符列表。 在這種情況下,字符串將拆分為字符,并且每個字符在集合中僅存儲一次。 ```py >>> D = set("Spam! Spam! Spam!") >>> D {'p', 'm', ' ', 'a', 'S', '!'} ``` 而且因為我已經提到過,您可以使用集合來過濾列表的重復項,因此這里是示例: ```py >>> l = [1,2,3,2,1,2,3,4,5,6,5,6,4,7,8,3,2,1,3,4,5,6] >>> l [1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 6, 4, 7, 8, 3, 2, 1, 3, 4, 5, 6] >>> l = list(set(l)) >>> l [1, 2, 3, 4, 5, 6, 7, 8] ``` 此示例首先將`l`轉換為一個集合,該集合將刪除所有重復的元素,然后將集合折回為允許進行索引的列表。 我在進行網站抓取并親自編寫抓取邏輯時使用了這種類型的過濾。 ## 更改 Python 集 集是可變的(不是一成不變的),因此您可以更改它們的元素。 更改意味著添加和刪除元素。 由于集合不支持索引,因此無法像列表一樣更改給定索引的元素。 試想一下,如果您可以更改一組中的一個元素,將會發生什么? 必須每次在后臺運行某種機制來過濾出可能的重復元素。 那將是無稽之談,并且會使使用`set`非常緩慢。 這意味著我們僅需添加和刪除元素。 與列表不同,您不能使用加法運算符(加號`+`)來擴展集合。 您必須使用`add()`或`update()`。 這兩種方法的區別在于參數的數量和類型。 ```py >>> A = {1} >>> A {1} >>> A.add(2) >>> A {1, 2} >>> A.add({3}) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set' >>> A.add((3)) >>> A {1, 2, 3} >>> A.add((3,4)) >>> A {1, 2, 3, (3, 4)} >>> A.add(5,6) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: add() takes exactly one argument (2 given) >>> A.add([5,6],(7)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: add() takes exactly one argument (2 given) >>> A.update([5,6],(7)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable >>> A.update([5,6],(7,)) >>> A {1, 2, 3, 5, 6, 7, (3, 4)} >>> A.update([1,2,3,4]) >>> A {1, 2, 3, 4, 5, 6, 7, (3, 4)} ``` 如上例所示,您需要為`add`函數提供一個不可變的元素(就像創建集合時一樣)。 `update`函數采用多個參數,這些參數必須是集合。 這些集合是不可變的,也不必只是必須是集合。 在所有情況下,都避免重復。 ## 移除元素 有時您需要根據各種條件刪除元素。 在這種情況下,您有一些方法在每種情況下的行為都會略有不同。 ```py >>> A = {1, 2, 3, 4, 5, 6, 7, 8, 9, (3, 4)} >>> A {1, 2, 3, 4, 5, 6, 7, 8, 9, (3, 4)} >>> A.remove((3,4)) >>> A {1, 2, 3, 4, 5, 6, 7, 8, 9} >>> A.remove(3,4) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: remove() takes exactly one argument (2 given) >>> A.remove(5) >>> A {1, 2, 3, 4, 6, 7, 8, 9} >>> A.remove(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 5 leanpub-start-insert >>> A.discard(5) leanpub-end-insert >>> n = A.pop() >>> n 1 >>> A {2, 3, 4, 6, 7, 8, 9} >>> A.clear() >>> A set() >>> A.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'pop from an empty set' ``` 如您所見,`remove`函數僅使用一個參數,而不是更多。 即使使用`A.remove((3,4))`,我們也只提供一個元素—元組。 如果要添加多個元素,則會出現`TypeError`。 如果該鍵不存在于集合中,則在嘗試使用`remove`擺脫鍵時會出現`KeyError`。 但是,如果給定鍵不在集合中,則丟棄不會產生任何噪音。 它默默地發出有關該應用的通知,該應用不知道集合的狀態,因此不再打擾。 `pop`函數(就像我們已經知道的那樣)采用集合中的一個元素,將其刪除并返回。 如果集合為空,則將再次收到`KeyError`。 似乎在使用`pop`時總是返回第一個元素,但是您不知道集合中元素的順序。 實現可能會改變它們存儲元素的方式并記住:如果您自己運行應用,則不會看到集合中的元素。 ## 凍結集 凍結集是一種特殊的集,它具有與普通集相同的屬性,但是您不能更改其元素。 這意味著,一旦創建了凍結集,就必須遵守分配給它的值(自然地,重新分配變量始終是一種解決方案)。 我們來看一些示例。 ```py >>> A = frozenset([1,2,3,4,5]) >>> B = {2,4,6,8,10} >>> A | B frozenset({1, 2, 3, 4, 5, 6, 8, 10}) >>> A & B frozenset({2, 4}) >>> A.add(6) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' >>> A += {6} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +=: 'frozenset' and 'set' >>> A += frozenset({6}) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +=: 'frozenset' and 'frozenset' ``` 如您在上面的示例中看到的那樣,沒有方法可以將新元素添加到凍結集中。 刪除或更改元素也是如此。 好吧,`frozenset`被凍結了,僅供使用。 ### 參考文獻 * [官方文檔](https://docs.python.org/3/tutorial/datastructures.html)
                  <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>

                              哎呀哎呀视频在线观看