hirhirの日記

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

Python3 入門 Pyenv でインストールした Anaconda をUpdateするの巻

現在の Pyenv でインストールした Anaconda のverは

以下のコマンドで確認できる

pyenv version

結果

anaconda3-2.1.0 (set by /Users/userhome/.pyenv/version)

ここにインストールされた事を確認した。

さて、、、、anaconda さんの中身確認

公式はこちら

docs.continuum.io

自身との確認

conda list

少し違うので、なんとなくupdateを決行

conda update anaconda

 

Update は無事終了。。。

 

以前にやったインストールはこちら

hirhir.hatenablog.com

 

 

 

 

Python3 入門:None NoneType

Python3 入門 None

えーとですね、なんか君、、2の頃と変わってない?

こんなだったけかな。。。

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

3. 組み込み定数 — Python 3.4.3 ドキュメント

ではではnotebookで。。。

In [1]:
 
type(None)
 
 
Out[1]:
NoneType
In [2]:
 
None == True
 
 
Out[2]:
False
In [3]:
 
None is True
 
 
Out[3]:
False
In [4]:
 
None == False
 
 
Out[4]:
False
In [5]:
 
None is False
 
 
Out[5]:
False
In [6]:
 
None == 0
 
 
Out[6]:
False
In [7]:
 
None is 0
 
 
Out[7]:
False
In [8]:
 
None == ''
 
 
Out[8]:
False
In [9]:
 
None is ''
 
 
Out[9]:
False
In [10]:
 
None == None
 
 
Out[10]:
True
In [11]:
 
None is None
 
 
Out[11]:
True
In [12]:
 
a = None
b = None
a == b
 
 
Out[12]:
True
In [13]:
 
a is b
 
 
Out[13]:
True
In [14]:
 
None = a
 
 
 
  File "<ipython-input-14-733e71aa504e>", line 1
    None = a
            ^
SyntaxError: can't assign to keyword

 

In [25]:
 
if not a:
    print(a)
 
 
 
None

んーどうやらFalse扱いらしいです.

まぁ書いてありますがね。。。

比較は == ではなく is か is not を使用するべきとのこと 

Jared Grubb: Python: "is None" vs "==None"

ただこりゃ~古いな。。。

 

蛇足

is と==を検証していた所以下の様な挙動が。。。

In [67]:
 
a = 2
b = 2
a is b
 
 
Out[67]:
True
In [69]:
 
a = a*10
b = b*10
a is b
 
 
Out[69]:
True
In [70]:
 
c = 'c'
d = 'c'
c is d
 
 
Out[70]:
True
In [71]:
 
c = c*10
d = d*10
c is d
 
 
Out[71]:
False


Falseだと???????????????????

In [72]:
 
print(c)
print(d)
 
 
 
cccccccccc
cccccccccc
In [73]:
 
c == d
 
 
Out[73]:
True
In [74]:
 
a == b
 
 
Out[74]:
True
In [75]:
 
e = "cccccccccc"
f = "cccccccccc"
 
e is f
 
 
Out[75]:
True


今度はTrue!!
要は生成の仕方なのか??

In [76]:
 
e == f
 
 
Out[76]:
True

 

つまりは別物か?

In [77]:
 
id(e) 
 
 
Out[77]:
4379941808
In [78]:
 
id(f)
 
 
Out[78]:
4379941808
In [79]:
 
id(a)
 
 
Out[79]:
4297332992
In [80]:
 
id(b)
 
 
Out[80]:
4297332992
In [81]:
 
id(c)
 
 
Out[81]:
4379949168
In [82]:
 
id(d)
 
 
Out[82]:
4379980144

 

どうやらオブジェクトが別物で

完全に同一でないと is は別物としてみなすということ

だからNoneは同一でpython内では完全な同一な同値って意味かな

あーすっきりしたーー

 

Python3 入門:ネイティブデータ型 辞書 dict 追加 更新 削除

辞書 dict

ぱっとチュートリとDive 見た感じは まぁMap、実際もそうでしょう

5. データ構造 — Python 3.4.3 ドキュメント

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

 

ipython notebookでやってみる

In [12]:
 
adict = {'a' :1 ,  'b' : True , 'c' : 'hoge' , 'd' : 0.1}
adict
 
 
Out[12]:
{'c': 'hoge', 'a': 1, 'b': True, 'd': 0.1}

普通のMapにしか見えない、、、当たり前か。。。

In [13]:
 
adict['a']
 
 
Out[13]:
1
In [14]:
 
adict ['b']
 
 
Out[14]:
True

通常のkeyValue形式の形で取り出し可能ってことですね

もちろんindexを持たず順位制も記憶しないのでこんなのは無理

In [15]:
 
adict[0]
 
 
 
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-15-d355b9570872> in <module>()
----> 1 adict[0]

KeyError: 0

keyvalueの追加更新削除をしてみる

In [20]:
 
del adict['e']
adict
 
 
Out[20]:
{'c': 'hoge', 'a': 1, 'b': True, 'd': 0.1}
In [21]:
 
adict.pop('d')
 
 
Out[21]:
0.1
In [22]:
 
adict
 
 
Out[22]:
{'c': 'hoge', 'a': 1, 'b': True}

del は削除した値を返さない

popは削除した値を返す

In [24]:
 
bdict = {'a' :2,  'b' : False , 'c' : 'test' , 'd' : -0.1}
 
 
In [26]:
 
bdict.popitem()
 
 
Out[26]:
('a', 2)

popitemはpopと同様削除したkeyValueを返すけどランダムに削除するみたい

あんまり使わないかなぁ

In [28]:
 
bdict.clear()
 
 
In [29]:
 
bdict
 
 
Out[29]:
{}
In [30]:
 
len(bdict)
 
 
Out[30]:
0

clear()は何も返却しないけど

中身の値だけ削除するただしobjectは残る

ちょっと遊んでみる

In [42]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : [1,2,3] , 'list' : bdict['list'] + [4,5,6]}
bdict
 
 
Out[42]:
{True: 1, 'list': [1, 2, 3, 4, 5, 6]}

なるほどkeyにブールを使うときはなさそうだけど注意しとこうかな?微妙

リストのkeyvalueに書き換えができた。。。

In [43]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : bdict['list'] + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
Out[43]:
{True: 1, 'list': [1, 2, 3]}

うんやっぱり書き換え

In [44]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : print(bdict['list']) + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
 
[1, 2, 3]
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-44-149c883cdcd2> in <module>()
----> 1 bdict = {True :'hoge' , 1: 1  , 'list' : print(bdict['list']) + [4,5,6] , 'list' : [1,2,3] }
      2 bdict

TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'

とはいえ

さきに評価はするらしいその後にkeyValueの書き換え

 

次はキーの取得

In [45]:
 
bdict = {True :'hoge' , 1: 1  , 'list' : bdict['list'] + [4,5,6] , 'list' : [1,2,3] }
bdict
 
 
Out[45]:
{True: 1, 'list': [1, 2, 3]}
In [46]:
 
bdict.keys()
 
 
Out[46]:
dict_keys([True, 'list'])
In [47]:
 
list(bdict.keys())
 
 
Out[47]:
[True, 'list']
In [51]:
 
bdict
 
 
Out[51]:
{True: 1, 'list': [1, 2, 3]}
In [52]:
 
sorted(bdict.keys())
 
 
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-52-2605cf6f7095> in <module>()
----> 1 sorted(bdict.keys())

TypeError: unorderable types: str() < bool()

値の混在の場合はkeyの取得はできないらしい

In [54]:
 
bdict = {True :'hoge'  , False : [1,2,3] }
bdict
 
 
Out[54]:
{False: [1, 2, 3], True: 1}
In [55]:
 
sorted(bdict.keys())
 
 
Out[55]:
[False, True]

 

キーの取得ができた。キーの型は統一した方が取り回しが良いねって事だ、

forで回すとこんな感じ

In [56]:
 
bdict = {'a' :2,  'b' : False , 'c' : 'test' , 'd' : -0.1}
 
for k, v in bdict.items():
    print(k, v)
 
 
 
c test
a 2
b False
d -0.1

 以上

あ、whileloop忘れた...orz 今度やろう。。。

 

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}



 

本日はここまで!

参考図書

 

 

 

 

 

Python3 入門:Anaconda の Pandas にてXlsxの読込

本日は気分を変えて

PandasにてXLSの読込 拡張子はxlsxを読み込む事にします。

データセット横浜市のオープンデータを読込やすいように

英字に変換したもの←これはコツでカラムやINDEXは英字表記が良いと思う

Pandasは先日Anacondaでインストール済みのものを使用する

実行環境はやはりAnacondaでインストール済みのIPython NoteBookを使用する。

いやーAnaconda楽ですねぇ~

Anacondaのインストールは下記を参照

hirhir.hatenablog.com

では実行開始

ipython notebook

In [39]:
 
import pandas as pd
 
book = "/Users/username/PycharmProjects/testPython/mobileIT.xlsx"
sheet = "table"  # 読み込むシート名
EXL = pd.ExcelFile(book)  # xlsxOpen
Data = EXL.parse(sheet) # DataFrameとして読込
 
 
In [42]:
 
Data
 
 
Out[42]:
 town_nameins64ins1500INDShititucatv-itdslftthfwabwamobile_adder
0 sapporo 50600 500 12.6 143068 246517 946272 2159 140854 4926875
1 sendai 35204 323 6.9 50201 94748 430786 59529 2216361
2 saitama 31496 3560 10.4 443336 306795 1329499 208078 7134000
3 chiba 24681 413 337745 256844 1227046 177983 6165000
4 tokyo 537000 13000 9.3 975825 672032 3431327 1 2189966 26177000
5 kawasaki 28986 557 13 718025 405420 1970306 1 359124 9708000
6 yokohama 87672 1491 13 718025 405420 1970306 1 359124 9708000
7 sagamihara 12199 50 13 718025 405420 1970306 1 359124 9708000
8 niigata 24154 122 9.1 40885 94264 397453 7 30576 1991241
9 sizuoka 27020 157 7.9 24583 229166 728881 142 82748 3537689
10 hamamatu 21997 100 9.8
11 nagoya 84864 2173 7.9 349463 263341 1445045 237947 7548589
12 kyoto 41647 294 49918 111683 619573 87879 2585846
13 osaka 135917 2537 7.3 767967 302964 1967554 391294 9890114
14 sakai 15856 82 13.5 767967 302964 1967554 391294 9890114
15 kobe 40805 537 8.8 340654 199063 1039919 161614 5489094
16 okayama 21088 278 8.7 62989 86251 310439 439 46833 1810517
17 hiroshima 38943 33599 142853 532247 455 90844 2779323
18 kitakyusyu 20660 133 8.7 258493 212133 885219 61 138773 5187267
19 hukuoka 60226 747 6.3 258493 212133 885219 61 138773 5187267
20 kumamoto 17935 1420 7.9 32995 78507 243872 348 35677 1621006

 

ここで注意カラムに全角文字は使用しないほうがいいようだ

pandasで読み込めない。。。なにか読む方法があるかもしれないが

見つからなかった。

indexについてはdefaultにて数字を割り振った。文字列でもindex振れるようなので

今度テストしてみよう。。。

In [63]:
 
Data.index
 
 
Out[63]:
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], dtype='int64')

単純なINDEXが取得できる

In [43]:
 
Data.columns
 
 
Out[43]:
Index(['town_name', 'ins64', 'ins1500', 'INDShititu', 'catv-it', 'dsl', 'ftth', 'fwa', 'bwa', 'mobile_adder'], dtype='object')

カラム名の取得 ここは英字が楽 日本語も読めるがkey指定などで
取り回しができなかった。

In [47]:
 
Data.town_name 
 
 
Out[47]:
0        sapporo
1         sendai
2        saitama
3          chiba
4          tokyo
5       kawasaki
6       yokohama
7     sagamihara
8        niigata
9        sizuoka
10      hamamatu
11        nagoya
12         kyoto
13         osaka
14         sakai
15          kobe
16       okayama
17     hiroshima
18    kitakyusyu
19       hukuoka
20      kumamoto
Name: town_name, dtype: object
In [58]:
 
Data.ix[0]
 
 
Out[58]:
town_name       sapporo
ins64             50600
ins1500             500
INDShititu         12.6
catv-it          143068
dsl              246517
ftth             946272
fwa                2159
bwa              140854
mobile_adder    4926875
Name: 0, dtype: object
In [59]:
 
Data.ix[0].town_name
 
 
Out[59]:
'sapporo'
In [61]:
 
Data.town_name
 
 
Out[61]:
0        sapporo
1         sendai
2        saitama
3          chiba
4          tokyo
5       kawasaki
6       yokohama
7     sagamihara
8        niigata
9        sizuoka
10      hamamatu
11        nagoya
12         kyoto
13         osaka
14         sakai
15          kobe
16       okayama
17     hiroshima
18    kitakyusyu
19       hukuoka
20      kumamoto
Name: town_name, dtype: object
In [62]:
 
Data.town_name[0]
 
 
Out[62]:
'sapporo'

列と行と単一セルの取得をしてみた
思ってたより楽でJavaのPOIあたりで書くより非常に楽だと
しかし実はこれ以前に1000万行ほどのデータ・セットを
読み込んで見たけどPCが固まった。。。。
大量データは厳しいのかなぁ。。。
うーーーん検討の余地あり!!

 

結論

 

 PythonでXlsを読み込む方法は複数あるみたいだが

pandasは非常に楽

欠点は日本語が読みにくい事か、、、

まぁそこら辺は置き換えればいいけど

うちの会社のデータの置き換え面倒くさいなぁ

日本語のままでDataFrame扱いたいができるのかしら。。。。

参考図書

 

 

 

 

Python3 入門:ネイティブデータ型 タプル

Python3 入門 タプル

タプルとは?

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

タプルはイミュータブルなリストだ。いったん作成されたタプルは、どんな手段によっても変更できない。

らしい,まあ不変のリストのイメージだけど違うらしい連結はできるみたい

リストとの相互変換可能とのこと

 

では今回もipython notebookにて いやー便利だわnotebook

In [1]:
 
a=('a',"b",'c',"c")
a
 
 
Out[1]:
('a', 'b', 'c', 'c')
In [3]:
 
a[1]
 
 
Out[3]:
'b'
In [4]:
 
a[-1]
 
 
Out[4]:
'c'
In [5]:
 
a[1:3]
 
 
Out[5]:
('b', 'c')

indexが使えてスライスすればタプルを返す。

まぁリストと変わらない。

In [1]:
 
a=('a','b','c','d','e')
a
 
 
Out[1]:
('a', 'b', 'c', 'd', 'e')
In [2]:
 
a.append("f")
 
 
 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-0a7fa197c53b> in <module>()
----> 1 a.append("f")

AttributeError: 'tuple' object has no attribute 'append'

In [3]:
 
a.extend([1])
 
 
 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-753518d57520> in <module>()
----> 1 a.extend([1])

AttributeError: 'tuple' object has no attribute 'extend'

In [4]:
 
a.pop(1)
 
 
 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-5fb08b80da19> in <module>()
----> 1 a.pop(1)

AttributeError: 'tuple' object has no attribute 'pop'

In [5]:
 
a.remove(-1)
 
 
 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-89080a03c5c6> in <module>()
----> 1 a.remove(-1)

AttributeError: 'tuple' object has no attribute 'remove'

In [7]:
 
a.index('a')
 
 
Out[7]:
0
In [8]:
 
a.index(0)
 
 
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-8-8b50e151dfc5> in <module>()
----> 1 a.index(0)

ValueError: tuple.index(x): x not in tuple

なるほどタプルは

append,extend,pop,removeは変更ができないので持っていない

indexは参照なのでOK

存在しないならErrorを返却する。

でも連結はできる

In [16]:
 
a=(1,2,3,4,5)
b=(6,7,8,9,0)
c=a+b
c
 
 
Out[16]:
(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)

関数はないけど

不変性ではない、、、ないんかい!って突っ込んだ

 

相互変換

In [2]:
 
a=('a','b','c','d','e')
list(a)
 
 
Out[2]:
['a', 'b', 'c', 'd', 'e']
In [3]:
 
tuple(a)
 
 
Out[3]:
('a', 'b', 'c', 'd', 'e')

listとtupleの相互変換ができる

リストの凍結と解凍ってところですなー

 

そしてtupleは参照がlistより高速らしい、、、

以下にて検証してみた

 

In [8]:
 
import time
 
base = [i for i in range(1000000)]
tmplist = [i for i in range(1000000)]
 
start = time.clock()
tmp = []
for i in base:
  tmp = tmplist[i]
 
end = time.clock()
print(end - start)
 
 
 
0.45567199999999985
In [9]:
 
import time
 
base = tuple([i for i in range(1000000)])
tmplist = tuple([i for i in range(1000000)])
 
start = time.clock()
tmp = 0
for i in base:
  tmp = tmplist[i]
 
end = time.clock()
print(end - start)
 
 
 
0.1010339999999994

 

なるほど高速みたい

 しかし

In [12]:
 
import time
start = time.clock()
base = [i for i in range(1000000)]
tmplist = [i for i in range(1000000)]
 
tmp = []
for i in base:
  tmp = tmplist[i]
 
end = time.clock()
print(end - start)
 
 
 
0.28361699999999956
In [13]:
 
import time
start = time.clock()
base = tuple([i for i in range(1000000)])
tmplist = tuple([i for i in range(1000000)])
 
 
tmp = 0
for i in base:
  tmp = tmplist[i]
 
end = time.clock()
print(end - start)
 
 
 
0.2708940000000002

 う~~んリストからtupleの変換までのトータルコストで考えると

ほとんど変わらない。。。。

使い回しのタプルならいいけどわざわざ変換してまで

tuple使うのはどうなんだろう。。。ちょっと考慮する必要があるなぁ

 うーん使いドコロが微妙

 どういう使い方がいいんだろう

 誰か教えて下さい。。。m(_ _)m 

 

Python3 入門:ネイティブデータ型 リスト その2

Python3 入門 リスト その2

リストの検索

In [1]:
 
a=['a',2,'hoge','foo']
a
 
 
Out[1]:
['a', 2, 'hoge', 'foo']
In [2]:
 
a.count(2)
 
 
Out[2]:
1
In [3]:
 
'hoge' in a
 
 
Out[3]:
True
In [4]:
 
'bar' in a
 
 
Out[4]:
False
In [5]:
 
a.index('hoge')
 
 
Out[5]:
2
In [6]:
 
a.index("hoge")
 
 
Out[6]:
2
In [7]:
 
a.index('bar')
 
 
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-6603ef13ee02> in <module>()
----> 1 a.index('bar')

ValueError: 'bar' is not in list

In [8]:
 
a.append('a')
a
 
 
Out[8]:
['a', 2, 'hoge', 'foo', 'a']
In [9]:
 
a.count("a")
 
 
Out[9]:
2

うん特に難しいところはない

シングルとダブルのクォートでもどっちでもサーチできる。

In [10]:
 
a.append(['a',2])
a
 
 
Out[10]:
['a', 2, 'hoge', 'foo', 'a', ['a', 2]]
In [11]:
 
a.count('a')
 
 
Out[11]:
2
In [12]:
 
a.count(2)
 
 
Out[12]:
1

オブジェクトの中身まではサーチできない。良かった良かった。

削除

 削除はdel , remove() , pop()

まずはdel、remove()

In [1]:
 
a=['a','b','c','d','e']
a
 
 
Out[1]:
['a', 'b', 'c', 'd', 'e']
In [2]:
 
a[2]
 
 
Out[2]:
'c'
In [3]:
 
del a[2]
a
 
 
Out[3]:
['a', 'b', 'd', 'e']
In [4]:
 
a[2]
 
 
Out[4]:
'd'
In [5]:
 
a.remove('b')
a
 
 
Out[5]:
['a', 'd', 'e']
In [6]:
 
a.remove('b')
 
 
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-197005e7438c> in <module>()
----> 1 a.remove('b')

ValueError: list.remove(x): x not in list

すごい素直な感じ

次はpop()

In [1]:
 
a=['a','b','c','d','e','f']
a
 
 
Out[1]:
['a', 'b', 'c', 'd', 'e', 'f']
In [2]:
 
a.pop()
 
 
Out[2]:
'f'
In [3]:
 
a
 
 
Out[3]:
['a', 'b', 'c', 'd', 'e']

削除した値を返しリストは値が削除されている


In [4]:
 
a.pop(1)
 
 
Out[4]:
'b'
In [5]:
 
a
 
 
Out[5]:
['a', 'c', 'd', 'e']
In [8]:
 
a.pop(3)
 
 
Out[8]:
'e'
In [9]:
 
a
 
 
Out[9]:
['a', 'c', 'd']
In [10]:
 
a.pop(1)
a.pop(1)
a.pop(1)
 
 
 
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-2fa578e1990b> in <module>()
      1 a.pop(1)
      2 a.pop(1)
----> 3 a.pop(1)

IndexError: pop index out of range

In [11]:
 
a
 
 
Out[11]:
['a']

削除するべき値がなくなった段階でエラー

うんちょっと癖ありますけど別にこういうものだと思えばいいかなと思いますえ

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

このサイトとリファレンスで勉強できそうだね。。。

参考図書