hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:ネイティブデータ型 集合 set

Python3 入門 集合

集合とは?

ネイティブデータ型 - Dive Into Python 3 日本語版

集合ならやったほうが早いかな?

ということで早速

ipython notebook

In [1]:
 
aset = {1,'a',True,0.1}
aset
 
 
Out[1]:
{0.1, True, 'a'}

 

ん?1はどこいった? Trueになったかな?

In [8]:
 
bset = {0,1}
bset
 
 
Out[8]:
{0, 1}
In [9]:
 
bset.update({True,False})
bset
 
 
Out[9]:
{0, 1}
In [10]:
 
cset ={0,1,2,3,4}
cset
 
 
Out[10]:
{0, 1, 2, 3, 4}
In [12]:
 
cset.update({True,False,5,6})
cset
 
 
Out[12]:
{0, 1, 2, 3, 4, 5, 6}

うん、どうやら0,1はTrue、Falseになるようだ

In [13]:
 
bset = {True,False}
bset
 
 
Out[13]:
{False, True}
In [14]:
 
bset.update({0,1,2,3,4})
bset 
 
Out[14]:
{False, True, 2, 3, 4}

逆も同様ですね。

 listからのsetの生成

In [23]:
 
alist = [1,2,3,4,5,6]
type(alist)
 
 
 
Out[23]:
list
In [24]:
 
aset = set(alist)
type(aset)
 
 
Out[24]:
set

 setの生成

In [29]:
 
bset = set()
bset
 
 
Out[29]:
set()
In [30]:
 
type(bset)
 
 
Out[30]:
set
In [31]:
 
len(bset)
 
 
Out[31]:
0
In [32]:
 
cset = {}
cset
 
 
Out[32]:
{}
In [33]:
 
type(cset)
 
 
Out[33]:
dict

あれ?dict?

なるほど

 add() update()の調査をする

In [35]:
 
aset = {1,'a',True,0.1}
aset
 
 
Out[35]:
{0.1, True, 'a'}
In [36]:
 
aset.add(7)
aset
 
 
Out[36]:
{0.1, True, 'a', 7}
In [37]:
 
aset.add(8,9)
aset
 
 
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-568b6af0d95f> in <module>()
----> 1 aset.add(8,9)
      2 aset

TypeError: add() takes exactly one argument (2 given)

 引数は2つはできない

 

In [38]:
 
aset.update(8)
aset
 
 
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-3ed9c20653c7> in <module>()
----> 1 aset.update(8)
      2 aset

TypeError: 'int' object is not iterable

In [39]:
 
aset.update({8})
aset
 
 
Out[39]:
{0.1, True, 8, 'a', 7}
In [40]:
 
aset.update({9,10})
aset
 
 
Out[40]:
{0.1, True, 7, 8, 9, 10, 'a'}
In [41]:
 
aset.update({11,12},{13,14})
aset
 
 
Out[41]:
{0.1, True, 7, 8, 9, 10, 11, 12, 'a', 13, 14}

updateの引数は2つ以上いけるようだ

 

discard()とremove()

In [42]:
 
aset.discard(10)
aset
 
 
Out[42]:
{0.1, True, 7, 8, 9, 11, 12, 'a', 13, 14}
In [43]:
 
aset.discard(10)
aset
 
 
Out[43]:
{0.1, True, 7, 8, 9, 11, 12, 'a', 13, 14}

 

In [44]:
 
aset.remove(9)
aset
 
 
Out[44]:
{0.1, True, 7, 8, 11, 12, 'a', 13, 14}
In [45]:
 
aset.remove(9)
aset
 
 
 
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-45-02d512b3550f> in <module>()
----> 1 aset.remove(9)
      2 aset

KeyError: 9

removeは存在しない値はKeyErrorを返却する

 

popとclear

In [46]:
 
aset
 
 
Out[46]:
{0.1, True, 7, 8, 11, 12, 'a', 13, 14}
In [47]:
 
aset.pop()
 
 
Out[47]:
0.1
In [48]:
 
aset.pop()
 
 
Out[48]:
True
In [49]:
 
aset
 
 
Out[49]:
{7, 8, 11, 12, 'a', 13, 14}
In [50]:
 
aset.clear()
 
 
In [51]:
 
aset
 
 
Out[51]:
set()

 集合演算

In [52]:
 
setA = {1,3,5,77,999}
setB = {1,2,4,66,77,88,999}
1 in setA
 
 
Out[52]:
True
In [54]:
 
2 in setA
 
 
Out[54]:
False
In [55]:
 
setA.union(setB)
 
 
Out[55]:
{1, 2, 3, 4, 5, 66, 77, 88, 999}
In [56]:
 
setA.intersection(setB) 
 
 
Out[56]:
{1, 77, 999}
In [57]:
 
setA.difference(setB) 
 
 
Out[57]:
{3, 5}
In [58]:
 
setA.symmetric_difference(setB) 
 
 
Out[58]:
{2, 3, 4, 5, 66, 88}



 

本日はここまで!

参考図書