1. 程式人生 > >《零基礎入門學習Python》(27)--集合:在我的世界裡,你就是唯一

《零基礎入門學習Python》(27)--集合:在我的世界裡,你就是唯一

前言

前面大家對花括號的用處有一定的瞭解了,接下來給大家介紹另一種用法。

知識點

集合:set

set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。

集合中的元素的三個特徵:

1)確定性(元素必須可hash) 

2)互異性(去重) 

3)無序性(集合中的元素沒有先後之分),如集合{3,4,5}和{3,5,4}算作同一個集合 

【注意】:集合存在的意義就在於去重和關係運算。

建立集合

  • 建立一個空集合需使用set() 工廠函式: 

語法:

class set([iterable])

引數說明:

iterable -- 可迭代物件物件;

示例:

>>> set1 = set()
>>> type(set1)
<class 'set'>

>>> set2 = {11,22,33,12,11}
>>> type(set2)
<class 'set'>
>>> set2
{33, 11, 12, 22}

【注意】:注意在建立空集合的時候只能使用s=set(),因為s={}建立的是空字典

>>> a = set('boy')                      #set一個字串
>>> a
{'b', 'y', 'o'}

>>> b = set(['y','b','o','o'])          #set一個列表
>>> b
{'b', 'y', 'o'}

>>> f = set(('k1','k1','k2','k3',1,2))  #set一個元祖
>>> f
{1, 2, 'k2', 'k3', 'k1'}

>>> c = set({'k1':1,'k2':2,'k3':2})     #set一個字典
>>> c
{'k2', 'k1', 'k3'}
>>> type(c)
<class 'set'>

>>> d = {1,2,3,4}
>>> type(d)
<class 'set'>
>>> d
{1, 2, 3, 4}

>>> e = {(1,2,1,1)}
>>> e
{(1, 2, 1, 1)}

建立不可變集合

  • frozenset() 返回一個凍結的集合,凍結後集合不能再新增或刪除任何元素。

語法:

class frozenset([iterable])

引數
iterable -- 可迭代的物件,比如列表、字典、元組等等。

示例:

>>>a = frozenset(range(10))     # 生成一個新的不可變集合
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> b = frozenset('runoob') 
>>> b
frozenset(['b', 'r', 'u', 'o', 'n'])   # 建立不可變集合


>>> num3 = frozenset([1,2,3,4,5])
>>> num3
frozenset({1, 2, 3, 4, 5})
>>> num3.add(0)
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    num3.add(0)
AttributeError: 'frozenset' object has no attribute 'add'

集合的關係運算

  • in,not in:判斷某元素是否在集合內
>>> a
{'b', 'y', 'o'}
>>> b in a
False
>>> 'b' in a
  • ==,!=:判斷兩個集合是否相等
>>> a = {3,4,5}
>>> b = {4,3,5}
>>> a == b
True

集合的內建方法

示例:
>>> s = {1,2,3,4}
>>> t = {1,2,3,4,5}
>>> s.issubset(t)
True
>>> s <= t
True
>>> s < t

示例:
>>> s = {1,2,3,4,5}
>>> t = {1,2,3}
>>> s.issuperset(t)
True
>>> s >= t
True
>>> s > t
True

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.union(t)
{1, 2, 3, 4, 5}
>>> s|t
{1, 2, 3, 4, 5}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s & t
{2, 3, 4}
>>> s.intersection(t)
{2, 3, 4}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s - t
{1}
>>> s.difference(t)
{1}

>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.symmetric_difference(t)
{1, 5}
>>> s ^ t
{1, 5}

示例:
>>> a = {1,2,3}
>>> b = a.copy()
>>> b
{1, 2, 3}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s |= t
>>> s
{1, 2, 3, 4, 5}

>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.update(t)
>>> s
{1, 2, 3, 4, 5}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.intersection_update(t)
>>> s
{2, 3, 4}

>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s &= t
>>> s
{2, 3, 4}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s -= t
>>> s
{1}

示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s ^= t
>>> s
{1, 5}

示例:
>>> s = {1,2,3,4}
>>> s.add('fs')
>>> s
{1, 2, 3, 4, 'fs'}

示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.remove('fs')
>>> s
{1, 2, 3, 4}
>>> s.remove('a')
Traceback (most recent call last):
  File "<pyshell#182>", line 1, in <module>
    s.remove('a')
KeyError: 'a'

示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.discard('fs')
>>> s
{1, 2, 3, 4}
>>> s.discard('a')
>>> s
{1, 2, 3, 4}

>>> s = {1, 2, 3, 4}
>>> s.pop()
1
>>> s
{2, 3, 4}
>>> s.pop()
2
>>> s
{3, 4}


>>> s.clear()
>>> s
set()

課後習題

0.請問集合的唯一作用是什麼喃?

答:集合幾乎所有的作用就是確保裡邊包含的元素的唯一性,就像世界上沒有兩片完全相同的樹葉一樣,集合內不可能存在兩個相同的元素。

1.如果你希望建立的集合是不變得,應該怎麼做?

答:frozenset()

2.請問如何確定一個集合裡面有多少個元素?

答:用len()函式正好可以滿足要求

>>> set1
{1, 2, 3, 4, 5, 6}
>>> len(set1)
6

3.目測以下程式碼會列印什麼內容?

>>> num_set=set([1,2,3,4,5])
>>> num_set[0]

答案:

Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    num_set[0]
TypeError: 'set' object does not support indexing

會報錯,因為集合是無序的