1. 程式人生 > >python -集合

python -集合

問卷調查 場景 process int 成了 ear set from clear


************************集合***********************

總結
可變數據類型: 列表, 字典, 集合
不可變數據類型: 數值類型, 字符串, 元組

- 可變數據類型實現某個功能, 直接改變可變的數據類型;
- 不可變數據類型實現某個功能,需要將結果賦值給另外一個變量;
是否實現for循環
可叠代數據類型: str, list, tuple, dict, set
不可叠代數據類型:數值類型
是否支持索引,切片, 重復和連接特性
有序的數據類型: str, list, tuple
無序的數據類型: dict, set


集合set的定義
集合是一個無序的,不重復的數據組合。

若花括號裏面是空,是字典型

In [2]: type(set)
Out[2]: dict

In [1]: set = {}

*)集合的定義
1.

In [16]: set = {1,2,3,1,2,3}

In [17]: set = {1,2,3,'hello',(1,2,3)}

In [18]: type(set)
Out[18]: set


2.工廠法
工廠法定義集合時,括號裏是可叠代對象,eg:數值類型不可以;

In [7]: lh = set() 定義空列表


*)set的應用場景
集合是一個無序的,不重復的數據組合。

? 列表去重
去重法一:
-轉換為集合數據類型;set(列表)

>>> list = [1,2,2,3,4,3,4,5]

>>> s = set(list)
>>> print s
set([1, 2, 3, 4, 5])

技術分享圖片


去重法二:
-字典法;


In [3]: list = [1,2,3,4,3,2,1,2]

In [4]: dict = {}.fromkeys(list)

In [5]: print dict
{1: None, 2: None, 3: None, 4: None}

*)集合的特性
-集合是無序的,不重復的數據類型
-因此不支持索引,不支持切片,不支持重復,不支持連接;
-支持成員操作符;
-支持for循環;

技術分享圖片


技術分享圖片


*)集合的增刪改查


***集合的增加

In [12]: set.add(5) #add增加


技術分享圖片

In [24]: set.update([5,6]) #update增加


技術分享圖片

***集合的刪除

s.remove()
刪除集合中指定的元素,如果不存在,則報錯

? s.pop()
隨機刪除集合中的某個元素,並返回刪除的元素

set.discard()
刪除集合指定元素,如果不存在,do nothing;

set.clear()
清空集合元素



技術分享圖片


技術分享圖片

*)集合的其他操作

顯示集合set的長度
In [14]: s
Out[14]: {2, 3, 'cd', 'ef'}

In [15]: len(s)
Out[15]: 4

技術分享圖片

? s.copy()
In [6]: set = {1,2,3,'a','b'}
集合的淺拷貝
In [7]: set.copy()
Out[7]: {1, 2, 3, 'a', 'b'}

? 關系測試:如交集、差集、並集的關系測試

s1 & s2 #並集

s1.intersection(s2) #並集

s1 | s2 #交集

s1.union(s2) #交集

s1 - s2 #1與2的差集

s2 - s1 #2與1的差集

s1 ^ s2 #對等差分


技術分享圖片


技術分享圖片


In [27]: s1.issuperset(s2) #1是2的父集

In [28]: s2.issubset(s1) #2是1的子集

技術分享圖片

In [29]: s1.isdisjoint(s2)



應用:
(華為機試題)題目描述
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性, 他先用計算機生成了N個1到1000
之間的隨機整數(N≤1000), N是用戶輸入的,對於 其中重復的數字,只保留一個,把其余相同的數去
掉,不同的數對應 著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順 序去找同學做調
查。請你協助明明完成“去重”與“排序”的工作;
提示:
生成隨機數,
import random
random.randint(1,1000)
列表的去重


技術分享圖片



技術分享圖片

python -集合