04_Pythonノート記録_#数値 #文字列 #リスト

pythonドキュメント ver3.6.4 Pythonチュートリアル」をやってみた時のノート(実験)を載せる

<数値型>

#演算時の型の変換について
#演算される値の方が統一されていない場合、整数の値を浮動小数点に変換される。

a = 2 * 2.5 - 1 

print(a)
↓
4.0

#演算時の注意点
#優先順位_**は-より優先度が高い

-3 ** 2 = -9  #-(3**2)と解釈される。-9としたいなら(-3)**2とする
3 ** -2 = 0.1111111111111  #なんだこれ・・・よくわからん・・・

<文字列型>

#文字列はインデックス標記できる

mozi = "mozi_index"
print(mozi[0])
↓
m

#マイナスで指定すると逆から数える

mozi = "mozi_index"
print(mozi[-5])
↓
i


《観察》
文字列の数を超えたインデックス番号を指定するとエラー
>>> IndexError: string index out of range(範囲外です)
|


#文字列をスライスで取得

mozi = "mozi_index"
print(mozi[0:2])
↓
mo

#片方だけインデックス番号を指定_開始インデックス

mozi = "mozi_index"

print(mozi[2:])
↓
zi_index

#片方だけry_終了インデックス

mozi = "mozi_index"
print(mozi[:2])
↓
mo

《観察》
・開始インデックス:任意に指定しなければ自動で0が指定される
・終了インデックス:自動では指定されない

#スライスで範囲外のインデックス番号を指定

#開始インデックスを範囲外に
a = "mozi_retu_index"
print(a[97874:])	
↓
表示なし

#終了インデックスを範囲外に
print(a[:254654])
↓
mozi_retu_index

《観察》
スライスなら範囲外でもエラーは起きない、つよい

#文字列の長さを知る len()

fish = "寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末食う寝る処に住む処藪ら柑子の藪柑子パイポパイポパイポのシューリンガンシューリンガンのグーリンダイグーリンダイのポンポコピーのポンポコナーの長久命の長助"	
print(len(fish))
↓
103

<リスト>

#基本的な書式

list = [10, 20, 30, 40, 50]
print(list)
↓
[10, 20, 30, 40, 50]

#インデックスで取り出す

print(list[3])
↓
40

#マイナスで指定すると逆から(文字列を同じ)

print(list[-2])
↓
40

#スライスで取得

list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print(list[1:4])
↓
[20, 30, 40]

#片方だけインデックス番号を指定_開始インデックス

print(list[6:])
↓
[70, 80, 90, 100]

#片方だけry_終了インデックス

print(list[:6])
↓
[10, 20, 30, 40, 50, 60]

《ハック》
インデックス番号であそんでみた

list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print(list[-5:1])
↓
表示なし

《ハック》
正のインデックスは、一番左の文字列を[0]として右向きに数える
負のインデックスは、一番右側の文字列を[-1]として左向きに数える。-0は0と同じ。

list = ["あ","い","う","え","お"]
print(list[-2:4])
↓
['え']

《ハック》
開始地点-2は"え"と"う”の間。終了地点4は"え"と"お"の間。
う - | え | - お  
挟まれた"え"が選ばれし文字列となった。
なお、list[:]とすると文字列すべて表示される。

#リスト合体

mozi = ["今日は","とても"]
retu = ["よい日に","なりそう"]
print(mozi + retu)
↓
['今日は', 'とても', 'よい日に', 'なりそう']

#リストの要素を編集

mozi = ["今日は","とても"]
retu = ["よい日に","なりそう"]
retu[0] = "悪い日に"
print(retu)
↓
['今日は', 'とても', '悪い日に', 'なりそう']

#リストに要素を追加

sinsu2 = 1,2,4,8,16,32,64,128
sinsu2.append(256)
sinsu2.append(256 * 2)  #演算の結果を追加
sinsu2.append(1024)
↓
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

《観察》
appendするときは、なぜか[各括弧]でなく(丸括弧)である。
間違えそうなので注意。

《ハック》
同時に複数要素を追加できないか

sinsu2.append(1024, 2048)
print(sinsu2)
↓
error:ypeError: append() takes exactly one argument (2 given)

《観察》
1つの引数だけ、ということだろうか

#リストでスライスを使いたい

sinsu16 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "G", "P", "C", "D", "E", "F"]
sinsu16[-6:-4] = ["A","B"]
print(sinsu16)
↓
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']

《観察》
マイナスでインデックス番号を指定する方法は、要素が多い時に便利だな

《ハック》
終了インデックスを-5にするとどうなる

sinsu16[-6:-5] = ["A","B"]
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'P', 'C', 'D', 'E', 'F']

《観察》
開始インデックス→9とGの間から右向きに、終了インデックス→GとPの間から左向きに
よって、挟まれた要素Gが代入の対象となり、AとBに上書きされた。

#スライスでリストの要素を削除する

sinsu16 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "G", "P", "C", "D", "E", "F"]
sinsu16[5:9] = []
print(sinsu16)
↓
['1', '2', '3', '4', '5', 'G', 'P', 'C', 'D', 'E', 'F']

#スライスでリストの要素を全て削除する

sinsu16 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "G", "P", "C", "D", "E", "F"]
sinsu16[:] = []
print(sinsu16)
↓
[]

《観察》
角括弧だけ残るのが、なんか悲しい

#len()で要素を数える

sinsu16 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "G", "P", "C", "D", "E", "F"]
print(len(sinsu16))
↓
15

#リストと他のリストを一緒にする《入れ子というらしい)

sinsu2 = [2,4,6,8]
sinsu16 = ["A","B","C"]
sinsu18 = [sinsu2, sinsu16]
print(sinsu18)
↓
[[2, 4, 6, 8], ['A', 'B', 'C']]

#リストの中のリストの中の要素を取り出したい

print(sinsu18[0][2])
↓
6


#おしりに要素を追加する.append(要素)

a = ["国語", "数学", "理科", "社会", "音楽"]
a.append("図工")
↓
['国語', '数学', '理科', '社会', '音楽', '図工']

《ハック》
#複数追加できるか?

a.append("図工", "英語", "体育")
↓
TypeError: append() takes exactly one argument (3 given)

《観察》
だめでした

#指定した位置に要素を追加する.insert(インデックス番号, 要素)

a.insert(1, "英語")
↓
['国語', '英語', '数学', '理科', '社会', '音楽']

《ハック》
#範囲外のインデックス番号を指定してみる

a.insert(999,"英語")
↓
['国語', '数学', '理科', '社会', '音楽', '英語']

《観察》
イケた。

《ハック》
"英語"だけを出力したい

print(a[999])
↓
indexError: list index out of range

print(a[-1])
↓
英語

《観察》
範囲外のインデックス番号でも追加はできるが、実際は他の要素と連続したところに格納されるらしい
又、(-999,英語)で.insertしたところ、"英語"はインデックス番号0に格納された。


#要素を指定して削除する.remove(要素)

a.remove("国語")
↓
['数学', '理科', '社会', '音楽']

《ハック》
#複数指定して削除したい

a.remove("国語", "数学", "社会")
↓
TypeError: remove() takes exactly one argument (3 given)

《観察》
1じゃなきゃダメみたい

#リスト内全削除をする.clear()
>|python|
a.clear()
↓
[]

《ハック》
#clear()はインデックス番号を指定して特定の要素だけ削除できる?

a.crear(2)
↓
TypeError: clear() takes no arguments (1 given)

<span style="color: #286f2c">《観察》
clear()は引数をとりません、とのこと。
無理なご様子。</span>


#リストに出現するとある要素の出現回数を数える.count()
>|python|
fish = ["マグロ", "サバ", "マグロ", "マグロ", "マグロ", "イカ"]
a.count("マグロ")
↓
4

#リストの要素を逆順にして返す.reverse()

a.reverse()
a
↓
['音楽', '社会', '理科', '数学', '国語']

《観察》
変数の中身そのものが逆順になる


#指定されたインデックス番号の要素を削除して、それを返す.pop(インデックス番号)

a.pop(3)
a
↓
社会
['国語', '数学', '理科', '音楽']


《ハック》
#指定しない.pop()

a.pop()
a
↓
音楽
['国語', '数学', '理科', '社会']

《観察》
指定しなければおしりの要素が対象となる
append()と組み合わせることでスタックとして使える↓↓

スタック = 後入先出(縦の瓶詰めのイメージ)、

《ハック》
#スタックとして使う.append(要素) .pop()

st = [1,2,3]
st.append(4) #おしりに代入
stappend(5) #おしりに代入
st #print
st.pop() #最新の要素を削除して返す , print
st.pop() #最新の要素を削除して返す , print
st #print
↓
[1, 2, 3, 4, 5]
5
4
[1, 2, 3]

《観察》
モジュールを使用してキューとして扱う方法もあったが、
よくわからなかったので後でやる

キュー = 先入先出。
      要素を追加することをエンキューといい
      要素を取り出すことをデューという

#リストの内包表記
リストの[]の中に計算式などを入れちゃうことで、エコにできるらしい

#01_2の段の計算

b = []   #---01
for q in range(1, 10)  #---02
	b.append(q * 2)  #---03
print(b)  #---04
↓
[2, 4, 6, 8, 10, 12, 14, 16, 18]

#02_2の段の計算、内包表記で

b = [q * 2 for q in range(1, 10)]
print(b)
↓
[2, 4, 6, 8, 10, 12, 14, 16, 18]

《観察》

      • 02と---03が逆転

もうちょっとやりたい

《ハック》
#03_13で割り切れる

w = []
for aa in range(0, 200):
	if aa % 13 == 0:
		w.append(aa)
print(w)
↓
[0, 13, 26, 39, 52, 65, 78, 91, 104, 117, 130, 143, 156, 169, 182, 195]

#04_13で割り切れる_内包表記で

w = [aa for aa in range(0,200)  if aa % 13 == 0]
↓
[0, 13, 26, 39, 52, 65, 78, 91, 104, 117, 130, 143, 156, 169, 182, 195]


#リストから要素を削除するdel文

sinsu16 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "G", "P", "C", "D", "E", "F"]
del sinsu16[-6]
↓
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'P', 'C', 'D', 'E', 'F']
#"G"を削除

del sinsu16[2:5]
↓
['1', '2', '6', '7', '8', '9', 'P', 'C', 'D', 'E', 'F']
#"3"から"5"を削除

del sinsu16[]
↓
[]
#全て削除

《観察》
これまでは、リストに空のスライスをわざわざ代入していた。
(例)sinsu16[2:5] = []
メソッドpop()との違いとしては削除する値を返さない点

del sinsu16

とすると変数そのものが削除され、参照(print等)をするとエラーになる。