Python set(集合)
set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
集合是一個無序的,不重複的資料組合,它的主要作用如下:
去重,把一個列表變成集合,就自動去重了
關係測試,測試兩組資料之前的交集、差集、並集等關係
集合(set):把不同的元素組成一起形成集合,是python基本的資料型別。
集合元素(set elements):組成集合的成員(不可重複)
>>> li=[1,2,'a','b']
>>> s =set(li)
>>> print(s) # {1, 2, 'a', 'b'}
>>> li2=[1,2,1,'a','a']
>>> s=set(li2)
>>> print(s) #{1, 2, 'a'} 重複元素在set中自動被過濾:
#注意,傳入的引數[1, 2, 3]是一個list,而顯示的{1, 2, 3}只是告訴你這個set內部有1,2,3這3個元素,
顯示的順序也不表示set是有序的。。
集合的相關操作
1、建立集合
由於集合沒有自己的語法格式,只能透過集合的工廠方法set()和frozenset()建立
>>> s1 = set('alvin')
>>> s2= frozenset('yuan')
>>> print(s1,type(s1)) #{'l', 'v', 'i', 'a', 'n'}
>>> print(s2,type(s2)) #frozenset({'n', 'y', 'a', 'u'})
2、訪問集合
由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍歷或使用in、not in來訪問或判斷集合元素。
>>> s1 = set('alvin')
>>> print('a' in s1) #True
>>> print('b' in s1) #False
>>> #s1[1] #TypeError: 'set' object does not support indexing
>>> for i in s1:
>>> print(i) #l i n v a
3、更新集合
可使用以下內建方法來更新:
s.add()
s.update()
注意只有可變集合才能更新:
>>> #s1 = frozenset('alvin')
>>> #print(s1) #frozenset({'a', 'n', 'i', 'v', 'l'})
>>> #s1.add("ccdc") #AttributeError: 'frozenset' object has no attribute 'add'
>>> s2 = set('alvin')
>>> s2.add('mm')
>>> print(s2) # {'mm', 'l', 'n', 'a', 'i', 'v'}
>>> s2.update('HO') # 新增多個元素
>>> print(s2) # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}
4、刪除集合
s.remove()
>>> s2 = set('alvin')
>>> >>> print(s2) # { 'l', 'n', 'a', 'i', 'v'}
>>> s2.remove('l')
>>> print(s2) # {'n', 'a', 'i', 'v'}
>>> del s2 #刪除集合本身
>>> print(s2) #NameError: name 's2' is not defined
四、集合型別運算子
1 in ,not in
2 集合等價與不等價(==, !=)
3 子集、超集
s=set('alvinyuan')
s1=set('alvin')
print('v' in s)
print(s1
4 聯合(|)
聯合(union)操作與集合的or操作其實等價的,聯合符號有個等價的方法,union()。
s1=set('alvin')
s2=set('yuan')
s3=s1|s2
print(s3) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
5、交集(&)
與集合and等價,交集符號的等價方法是intersection()
s1=set('alvin')
s2=set('yuan')
s3=s1&s2
print(s3) #{'n', 'a'}
print(s1.intersection(s2)) #{'n', 'a'}
6、查集(-)
等價方法是difference()
s1=set('alvin')
s2=set('yuan')
s3=s1-s2
print(s3) #{'v', 'i', 'l'}
print(s1.difference(s2)) #{'v', 'i', 'l'}
7、對稱差集(^)
對稱差分是集合的XOR(‘異或’),取得的元素屬於s1,s2但不同時屬於s1和s2.其等價方法symmetric_difference()
s1=set('alvin')
s2=set('yuan')
s3=s1^s2
print(s3) #{'l', 'v', 'y', 'u', 'i'}
print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}
應用
'''最簡單的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis)) #[1, 2, 3, 4]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2802431/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python-集合setPython
- python 集合型別 setPython型別
- Python學習之set集合Python
- 關於Python的集合setPython
- 集合框架-Set集合框架
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- Redis 入門 - 3(集合 set、有序集合 sort set)Redis
- python-資料型別之set集合Python資料型別
- Python之set集合的相關介紹Python
- Python - 基礎資料型別 set 集合Python資料型別
- python——集合set不存在重複元素Python
- python學習筆記24_集合set( )Python筆記
- python基礎之字典dict和集合setPython
- Python集合(set)型別的操作總結Python型別
- Redis 有序集合(sorted set)Redis
- Redis的集合型別(Set)Redis型別
- Redis的有序集合(sorted set)Redis
- Java集合(六) Set詳解Java
- Python基本語法_集合set/frozenset_內建方法詳解Python
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- js資料結構--集合(set)JS資料結構
- redis有序集合型別sort setRedis型別
- Java集合框架List,Map,Set等Java框架
- Set集合的直接子類TreeSet
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- Set集合的具體子類:HashSet
- 【java】【集合】set集合、唯一性保證、Linkset、案例Java
- Java內功心法,Set集合的詳解Java
- JAVA集合:常見Set原始碼學習Java原始碼
- MySQL:MGR 學習(1):寫集合(Write set)MySql
- redis 有序集合(sorted set)(redis學習七)Redis
- List ,Set,Map集合與陣列互轉陣列
- 「譯」Java集合框架系列教程四:Set介面Java框架
- Java 中的泛型 集合(List,Set) MapJava泛型
- Java集合中List,Set以及Map等集合體系詳解(史上最全)Java
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Java集合體系總結 Set、List、Map、QueueJava
- python 集合Python