天天看点

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