天天看點

Python 學習日記第三篇 -- 集合

一、集合

   set,集合,是唯一的、不可變的對象的一個無序集合。集合隻能包含不可變的對象類型,是以,清單和字典不能嵌入集合;如果需要存儲複合值,可以嵌入元組;如果需要嵌入集合本身,需要調用frozenset,由frozenset建立的集合不可變,且不可修改,但可以嵌套到其他集合中。

   1、集合的基礎知識(python2.7)

<code>1、定義空集合</code>

<code>In [2]: s1 = </code><code>set</code><code>()</code>

<code>2、建立集合</code>

<code>In [3]: s2 = {11,22,</code><code>'dd'</code><code>}</code>

<code>In [4]: print s2</code>

<code>set</code><code>([</code><code>'dd'</code><code>, 11, 22])</code>

<code>3、通過序列或其他可疊代的對象建立集合</code>

<code>In [5]: s3 = </code><code>set</code><code>(</code><code>'abcde'</code><code>)</code>

<code>In [6]: print s3</code>

<code>set</code><code>([</code><code>'a'</code><code>, </code><code>'c'</code><code>, </code><code>'b'</code><code>, </code><code>'e'</code><code>, </code><code>'d'</code><code>])</code>

<code>In [9]: s4 = </code><code>set</code><code>({</code><code>'a'</code><code>:1,</code><code>'b'</code><code>:</code><code>'gg'</code><code>})</code>

<code>In [10]: print s4</code>

<code>set</code><code>([</code><code>'a'</code><code>, </code><code>'b'</code><code>])</code>

<code>In [11]: s5 = </code><code>set</code><code>([1,2,</code><code>'ace'</code><code>,</code><code>'hj'</code><code>])</code>

<code>In [12]: print s5</code>

<code>set</code><code>([</code><code>'hj'</code><code>, 1, 2, </code><code>'ace'</code><code>])</code>

<code>4、通過序列或可疊代對象建立的集合可進行的數學操作</code>

<code>In [13]: </code><code>'a'</code> <code>in</code> <code>s3</code>

<code>Out[13]: True</code>

<code>In [14]: s3 -s4</code>

<code>Out[14]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [15]: s3 | s4</code>

<code>Out[15]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [16]: s3 &amp; s4</code>

<code>Out[16]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>}</code>

<code>In [17]: s3 ^ s4</code>

<code>Out[17]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [18]: s3 &gt; s4</code>

<code>Out[18]: True</code>

<code>In [19]: s3 &lt; s4</code>

<code>Out[19]: False</code>

   2、集合的方法

<code>1、添加元素:集合中無則添加,有則不進行操作</code>

<code>In [21]: s3.add(</code><code>'new'</code><code>)</code>

<code>In [22]: print s3</code>

<code>set</code><code>([</code><code>'a'</code><code>, </code><code>'c'</code><code>, </code><code>'b'</code><code>, </code><code>'e'</code><code>, </code><code>'d'</code><code>, </code><code>'new'</code><code>])</code>

<code>2、清除集合中所有元素</code>

<code>In [24]: s2</code>

<code>Out[24]: {11, 22, </code><code>'dd'</code><code>}</code>

<code>In [25]: s2.</code><code>clear</code><code>()</code>

<code>In [26]: s2</code>

<code>Out[26]: </code><code>set</code><code>()</code>

<code>3、淺拷貝</code>

<code>In [28]: s3</code>

<code>Out[28]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>In [29]: s5 = s3.copy()</code>

<code>In [30]: s5</code>

<code>Out[30]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>4、兩個集合的差集;</code>

<code>In [31]: s3</code>

<code>Out[31]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>In [32]: s4</code>

<code>Out[32]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>}</code>

<code>s3中存在而s4中不存在,差集</code>

<code>In [33]: s3.difference(s4)</code>

<code>Out[33]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>s3中不存在的和s4中不存在的都取出,對稱差集</code>

<code>In [34]: s3.symmetric_difference(s4)</code>

<code>Out[34]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>先比較差集,之後将比較的結果重新指派給s3</code>

<code>In [35]: s3.difference_update(s4)</code>

<code>In [36]: s3</code>

<code>Out[36]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>先比較對稱差集,之後将比較的結果重新複制給s3</code>

<code>In [42]: s3.symmetric_difference_update(s4)</code>

<code>In [43]: s3</code>

<code>Out[43]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'new'</code><code>}</code>

<code>5、移除指定元素,不存在不報錯</code>

<code>In [44]: s3.discard(</code><code>'new'</code><code>)</code>

<code>In [45]: s3</code>

<code>Out[45]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [46]: s3.discard(111)</code>

<code>6、移除指定元素,不存在會報錯</code>

<code>In [47]: s3.remove(111)</code>

<code>---------------------------------------------------------------------------</code>

<code>KeyError                                  Traceback (most recent call last)</code>

<code>&lt;ipython-input-47-179a5da03057&gt; </code><code>in</code> <code>&lt;module&gt;()</code>

<code>----&gt; 1 s3.remove(111)</code>

<code>KeyError: 111</code>

<code>7、随機移除集合中元素,集合為空時會報錯</code>

<code>In [48]: s3</code>

<code>Out[48]: {</code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [49]: s3.pop()</code>

<code>Out[49]: </code><code>'c'</code>

<code>In [50]: s3</code>

<code>Out[50]: {</code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>8、兩個集合取交集</code>

<code>In [57]: s4</code>

<code>Out[57]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>}</code>

<code>In [58]: s3</code>

<code>Out[58]: {</code><code>'a'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>In [59]: s3.intersection(s4)</code>

<code>Out[59]: {</code><code>'a'</code><code>}</code>

<code>将取出的交集重新指派給s3</code>

<code>In [60]: s3.intersection_update(s4)</code>

<code>In [61]: s3</code>

<code>Out[61]: {</code><code>'a'</code><code>}</code>

<code>9、判斷兩個集合有無交集</code>

<code>In [65]: s3.isdisjoint(s4)</code>

<code>Out[65]: False</code>

<code>10、并集</code>

<code>In [67]: s3.union(s4)</code>

<code>Out[67]: {</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>11、将可疊代的對象加入集合</code>

<code>清單</code>

<code>In [68]: l1 = [1,2,3,4]</code>

<code>In [69]: s3.update(l1)</code>

<code>In [70]: s3</code>

<code>Out[70]: {1, 2, 3, 4, </code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>}</code>

<code>字元串</code>

<code>In [71]: s3.update(</code><code>'jonny'</code><code>)</code>

<code>In [72]: s3</code>

<code>Out[72]: {1, 2, 3, 4, </code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'j'</code><code>, </code><code>'n'</code><code>, </code><code>'o'</code><code>, </code><code>'y'</code><code>}</code>

<code>元組</code>

<code>In [74]: s3.update(t1)</code>

<code>In [75]: s3</code>

<code>Out[75]: {1, 2, 3, 4, 12, 13, 14, </code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>, </code><code>'e'</code><code>, </code><code>'j'</code><code>, </code><code>'n'</code><code>, </code><code>'o'</code><code>, </code><code>'y'</code><code>}</code>

   3、集合解析(python3.x新特性)

<code>&gt;&gt;&gt; {i ** 2 </code><code>for</code> <code>i </code><code>in</code> <code>[1,2,3,4]}</code>

<code>{16, 1, 4, 9}</code>

本文轉自 元嬰期 51CTO部落格,原文連結:http://blog.51cto.com/jiayimeng/1898941