Python_集合、深淺copy、枚舉

集合set

 集合是無序的,不重複的數據集合,裏面的元素是可哈希的(不可變類型),可是集合自己是不可哈希的(因此集合作不了字典的鍵)。app

一、集合的建立。spa

三種方法:一、直接set()  只能建立一個元素且不能是 int,不然會報錯code

                   二、set({})能夠隨便建立對象

                   三、set = {}blog

set1 = set('a')
set2 = set({'a', 1})
set3 = {1, 2, 'barry'}
print(set1, type(set1))
print(set2, type(set2))
print(set3, type(set3))

{'a'} <class 'set'>
{1, 'a'} <class 'set'>
{1, 2, 'barry'} <class 'set'>

二、集合的增索引

1)、直接增長內存

set.app('a)rem

2)、迭代增長  update()it

set.update('a')   注意:a會被分解成最小元素,分別添加io

set1 = {'alex', 'wusir', 'ritian'}
set1.add('女神')
print(set1)

set1.update('AB')
print(set1)
set1.update('老師')
print(set1)
set1.update([1,2,3])
print(set1)

{'wusir', '女神', 'alex', 'ritian'}
{'ritian', 'A', 'B', 'wusir', '女神', 'alex'}
{'', 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'}
{'', 1, 2, 3, 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'}

三、集合的刪
1)、set.remove('a')    刪除指定元素,每次只能刪除一個元素

2)、set.pop()         隨機刪除一個元素

3)、set.clear()       清空集合

4)、del set                  刪除集合

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.remove('alex')  # 刪除一個元素
print(set1)
set1.pop()  # 隨機刪除一個元素
print(set1)
set1.clear()  # 清空集合
print(set1)

{'ritian', 'barry', 'egon', 'wusir'}
{'barry', 'egon', 'wusir'}
set()

四、集合的其餘操做

1)、交集  (&  或者  intersection)

set1 = {'as', 23, 'zx', 46, 55}
set2 = {'qw', 55, 46, 'zx', 8}
print(set1 & set2)
print(set1.intersection(set2))

{'zx', 46, 55}
{'zx', 46, 55}

2)、並集  (| 或者 union)

set1 = {'as', 23, 'zx', 46, 55}
set2 = {'qw', 55, 46, 'zx', 8}
set3 = {'er', 78, 46, 'zx', 89}
print(set1 | set2 | set3)
print(set1.union(set2))

{'qw', 8, 46, 78, 'as', 23, 55, 89, 'er', 'zx'}
{'qw', 8, 46, 'as', 23, 55, 'zx'}

3)、差集  (- 或者 difference)
set1 - set2  是求 set1 中不一樣於 set2 的元素

set2 - set1  是求 set2 中不一樣於 set1 的元素

set1 = {'as', 23, 'zx', 46, 55}
set2 = {'qw', 55, 46, 'zx', 8}
set3 = {'er', 78, 46, 'zx', 23}
print(set1 - set2 - set3)
print(set1.difference(set2))
print(set2.difference(set1))

{'as'}
{'as', 23}
{8, 'qw'}

4)、反交集     (^  或者 symmetric_difference)

set1 = {'as', 23, 'zx', 46, 55}
set2 = {'qw', 55, 46, 'zx', 8}
set3 = {'er', 78, 46, 'zx', 23}
print(set1 ^ set2 ^ set3)
print(set1.symmetric_difference(set2))
print(set2.symmetric_difference(set1))

{'er', 8, 46, 78, 'as', 'zx', 'qw'}
{8, 'as', 23, 'qw'}
{8, 'as', 23, 'qw'}

5)、子集與超集 

set1 = { 'zx', 46, 55}
set2 = {'qw', 55, 46, 'zx', 8}
print(set1 < set2)
print(set1.issubset(set2))
print(set2 > set1)
print(set2.issuperset(set1))

True
True
True
True

五、frozenset 不可變集合,讓集合變成不可變類型
1)、frozenset 轉換的結果是最小元素的集合,可是能夠轉換 list ,而後編輯。(能夠用來列表去重)

2)、frozenset 會將中間空格當成一個單個的元素生成。

s = frozenset('yang zhan')
print(s)

({'y','a','n','g',' ','z','h'})


li = ['qw', 'as', 23, 'as', 23, 4]
s = frozenset(li)
print(s, type(s))
s1 = list(s)
print(s)
s1.remove(4)
print(s1)

frozenset({'qw', 'as', 4, 23}) <class 'frozenset'>
frozenset({'qw', 'as', 4, 23})
['qw', 'as', 23]

深淺copy

一、賦值運算

l1 與 l2 指向的是同一內存地址,他們徹底是同樣的。

l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
l2 = l1
l1[3][0] = 7
print(l1, id(l1))
print(l2, id(l2))

[1, 2, 4, [7, ['er'], 'w', 5]] 6771080
[1, 2, 4, [7, ['er'], 'w', 5]] 6771080

二、淺拷貝 copy
對於淺 copy 來講,第一層建立的是新的內存地址,而從第二層開始,指向的都是同一內存地址

,全部對於第二層以及更深的層數來講保持一致性。

l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
l2 = l1.copy()
print(l1, id(l1))
print(l2, id(l2))

[1, 2, 4, ['a', ['er'], 'w', 5]] 6771080
[1, 2, 4, ['a', ['er'], 'w', 5]] 7154376

三、深拷貝 deepcopy
深拷貝,兩個徹底獨立的,改變任意一個的元素,不管多少層,兩一個毫不改變。

import copy
l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
l2 = copy.deepcopy(l1)
l1[3][0] = 7
print(l1, id(l1))
print(l2, id(l2))

[1, 2, 4, [7, ['er'], 'w', 5]] 8892680
[1, 2, 4, ['a', ['er'], 'w', 5]] 8894408

enumerate : 枚舉 


enumerate : 枚舉  ,對於一個可迭代的(iterable)/ 可遍歷的對象(如 list、str),enumerate 將其組成一個索引序列,利用它能夠同時得到索引和值。

li = ['電視', '電腦', '手機', '廚具']
for i in enumerate(li):
    print(i)
for index,name in enumerate(li,1): print(index,name)
for index,name in enumerate(li,10): print(index,name) (0, '電視') (1, '電腦') (2, '手機') (3, '廚具')
1 電視 2 電腦 3 手機 4 廚具
10 電視 11 電腦 12 手機 13 廚具
相關文章
相關標籤/搜索