python 基礎---集合
阿新 • • 發佈:2018-07-16
賦值運算 remove port bar 數據類型 xtend pan 子集和 返回
集合(set):可變的數據類型,他裏面的元素必須是不可變的數據類型,無序,不重復。{}
1 set1 = set({1,2,3})
2 print(set1)
3
4 #增 add,update
5 set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
6 set1.add(‘女神‘)
7 print(set1) #無序
8 #{‘女神‘, ‘egon‘, ‘barry‘, ‘wusir‘, ‘alex‘, ‘ritian‘}
9
10 set1.update(‘男神‘) #叠代增加,相當於list中的extend,按對象一個一個加
11 print(set1)
12 #{‘男‘, ‘女神‘, ‘egon‘, ‘barry‘, ‘wusir‘, ‘alex‘, ‘神‘, ‘ritian‘}
13
14 #刪 pop,remove,del, clear
15 set1.pop() #隨機刪除,有返回值
16 print(set1)
17
18 set1.remove(‘元素‘) #按元素刪除
19 print(set1)
20
21 set1.clear() #清空集合
22 print(set1)
23
24 del set1 #刪除集合
25 print(set1)
26
27 # 查
28 for i in set1:
29 print(i)
交集 &
並集 |
差集 -
反交集 ^
子集和超集
1 set1 = {1,2,3} 2 set2 = {1,2,3,4,5,6} 3 4 print(set1 < set2) 5 print(set1.issubset(set2)) # 這兩個相同,都是說明set1是set2子集。 6 7 print(set2 > set1) 8 print(set2.issuperset(set1)) # 這兩個相同,都是說明set2是set1超集。
集合可變,元素不可變,使用frozenset變成集合不可變
1 s = frozenset(‘barry‘)
2 print(s,type(s))
3 for i in s:
4 print(i)
深淺copy
1 #賦值運算
2 l1 = [1,2,3]
3 l2 = l1
4 l1.append(‘a‘)
5 print("{}\t\t{}".format(l1,l2))
6 #[1, 2, 3, ‘a‘] [1, 2, 3, ‘a‘]
1 #淺copy
2 l1 = [1,2,3]
3 l2 = l1.copy()
4 print(l1,l2)
5 print(id(l1),id(l2))
6 l2.append(‘a‘)
7 print(l1,l2)
8 """
9 [1, 2, 3] [1, 2, 3]
10 1848031189768 1848031187272
11 [1, 2, 3] [1, 2, 3, ‘a‘]
12 """
1 l1 = [1,2,[4,5,6],3]
2 l2 = l1.copy()
3 print(l1,id(l1))
4 print(l2,id(l2))
5 l1.append(‘a‘)
6 print(l1,l2)
7 l1[2].append(‘a‘)
8 print(l1,l2)
9 print(id(l1[2]))
10 print(id(l2[2]))
11 """
12 [1, 2, [4, 5, 6], 3] 2318104334664
13 [1, 2, [4, 5, 6], 3] 2318103951432
14 [1, 2, [4, 5, 6], 3, ‘a‘] [1, 2, [4, 5, 6], 3]
15 [1, 2, [4, 5, 6, ‘a‘], 3, ‘a‘] [1, 2, [4, 5, 6, ‘a‘], 3]
16 2318104337160
17 2318104337160
18
19 """
對於淺copy來說,第一層創建的是新的內存地址,而從第二層開始,指向的都是同一個內存地址,所以,對於第二層以及更深的層數來說,保持一致性。
深Copy
1 import copy
2 l1 = [1,2,[4,5,6],3]
3 l2 = copy.deepcopy(l1)
4 print(l1,id(l1))
5 print(l2,id(l2))
6 l1[2].append(‘a‘)
7 print(l1,l2)
8
9 l1 = [1,[1],2,3,4]
10 l2 = l1[:]
11 l1[1].append(‘a‘)
12
13 print(l1,id(l1))
14 print(l2,id(l2))
對於深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變。
python 基礎---集合