1. 程式人生 > >集合(二)

集合(二)

定義 set symmetric lis update 集合推導式 In true 字符串

集合轉換成字符串

>> set1 = {"1","2","3","4","5"}
>> "".join(set1)
‘13254‘
註意:轉換後字符串是無序的

集合轉換成元組

>> set1
set([‘1‘, ‘3‘, ‘2‘, ‘5‘, ‘4‘])
>> t = tuple(set1)
>> t
(‘1‘, ‘3‘, ‘2‘, ‘5‘, ‘4‘)

集合轉列表

>> l = list(set1)
>> l

[‘1‘, ‘3‘, ‘2‘, ‘5‘, ‘4‘]

set.clear()清空集合

>> set1.clear()
>> set1
set([])

set.copy()復制集合

>> set1 = {"1","2","3","4","5"}
>> set2 = set1.copy()
>> set2
set([‘1‘, ‘3‘, ‘2‘, ‘5‘, ‘4‘])

len(set)求集合長度

>> len(set1)
5

交集

利用 & 符號

>> a ={1,2,3,4}
>> b = {3,4,5,6}
>> a&b
set([3, 4])

set1.intersection(set2)

>> a.intersection(b)
set([3, 4])

set1.intersection_update(set2)
交集更新操作
返回兩個集合的交集,set1中其他元素被刪除

>> a.intersection_update(b)
>> a
set([3, 4])

並集
利用 |符號

>> a|b
set([1, 2, 3, 4, 5, 6])

set1.union(set2)

>> a.union(b)
set([1, 2, 3, 4, 5, 6])

set1.update(set2)
並集更新操作,set2中的元素被添加到set1

>> a.update(b)
>> a
set([1, 2, 3, 4, 5, 6])

差集
利用 - 減號

>> a-b
set([1, 2])
>> b - a
set([5, 6])

set1.difference(set2)

>> a.difference(b)
set([1, 2])

Set1.difference_update(set2)
差集更新操作,返回set1和set2的差集,set1中的其他不在set2中的元素被刪除

>> a ={1,2,3,4}
>> b = {3,4,5,6}
>> a.difference_update(b)
>> a
set([1, 2])
>> b
set([3, 4, 5, 6])
set1.symmetric_difference(set2)對稱差集
兩個集合中所有不屬於兩個集合交集的元素
對稱差集:集合A與集合B的對稱差集定義為集合A與集合B中所有不屬於A∩B的元素的集合,記為A△B,也就是說A△B={x|x∈A∪B,x?A∩B},即A△B=(A∪B)—(A∩B).也就是A△B=(A—B)∪(B—A)
>> a
set([‘a‘, ‘1‘, ‘c‘, ‘b‘])
>> b
set([‘y‘, ‘x‘, ‘1‘, ‘z‘])
>> a.symmetric_difference(b)
set([‘a‘, ‘c‘, ‘b‘, ‘y‘, ‘x‘, ‘z‘])

set1.symmtric_difference_update(set2)對稱差集更新操作
Set1返回兩個集合的對稱差集

>> a
set([‘a‘, ‘1‘, ‘c‘, ‘b‘])
>> b
set([‘y‘, ‘x‘, ‘1‘, ‘z‘])
>> a.symmetric_difference_update(b)
>> a
set([‘a‘, ‘c‘, ‘b‘, ‘y‘, ‘x‘, ‘z‘])

小練習:
一個文件由英文單詞組成,找出文件中只出現一次的單詞
#coding = utf-8
import string
only_one_list = []
with open("e:\python\word.txt","r") as file_obj:
content = file_obj.read()
for c in content:
if c in string.punctuation:
content.replace(c," ")
for word in set(content.split()):
only_one_list.append(word)

print only_one_list

判斷集合的關系
利用 > 、>=、 、< <=
集合可以使用大於(>)、小於(<)、大於等於(>=)、小於等於(<=)、等於(==)、不等於(!=)來判斷某個集合是否完全包含於另一個集合,也可以使用子父集判斷函數。

>> a = {1,2,3,4,5,6,7}
>> b = {1,2,3,4}
>> a > b
True
>> a < b
False
>> a >= b
True
>> b < a
True

set1.issuperset(set2)
判斷set1是否是set2的超集

>> a
set([1, 2, 3, 4, 5, 6, 7])
>> b
set([1, 2, 3, 4])
>> a.issuperset(b)
False
>> b.issuperset(a)
True

>> a.issubset(b)
True
set1.issubset(set2)
判斷set1是否是set2的子集

set1.isdisjoint(set2)是否不存在交集
判斷兩個集合是否不存在交集,如果兩個集合沒有交集,返回True,如果有交集返回False

>> a
set([‘y‘, ‘x‘, ‘z‘])
>> b
set([‘a‘, ‘c‘, ‘b‘])
>> a.isdisjoint(b)
True
>> c = {1,2}
>> d = {1,4,5}
>> c.isdisjoint(d)
False

集合推導式

基本集合推倒式

>> a
set([1, 2, 3, 4, 5, 6, 7])
>> {i*2 for i in a}
set([2, 4, 6, 8, 10, 12, 14])

帶if條件的集合推導式

>> {i**2 for i in a if i%2 == 0}
set([16, 36, 4])

多層循環集合推導式

>> a
set([‘y‘, ‘x‘, ‘z‘])
>> b
set([‘a‘, ‘c‘, ‘b‘])
>> {x+y for x in a for y in b }
set([‘xa‘, ‘ya‘, ‘xc‘, ‘yc‘, ‘yb‘, ‘za‘, ‘zb‘, ‘zc‘, ‘xb‘])

集合(二)