自分の備忘録もかねて随時追加していきます。
キーワードを書いておくのでそれでググれば詳細は出てくると思います。
▽:キーワードマーク
空白区切りの文字列を数値配列に変換
str_num = '1 2 3 4 5 6'
list_num = [int(x) for x in str_num.split()]
print(list_num)
# [1,2,3,4,5,6]
▽内包表記
2次元配列の重複を削除
dup_list = [
[1,2],
[3,4],
[5,6],
[1,2],
[3,4]]
uni_list = list(map(list,set(map(tuple,dup_list))))
print(uni_list)
# [[1,2],
# [3,4],
# [5,6]]
▽2次元配列 重複行削除
文字列を文字の配列に変換
word = 'abcde'
word_list = list(word)
print(word_list)
# ['a','b','c','d','e']
配列をアンパック
num_list = [1,2,3,4,5,6]
print(num_list)
# [1,2,3,4,5,6]
print(*num_list)
# 1 2 3 4 5 6
#配列の前後に要素を入れる場合なども使用
add_list = [-1,0,*num_list,7,8]
print(add_list)
# [-1,0,1,2,3,4,5,6,7,8]
▽アンパック
H × Wの2次元配列を(H + 2) × (W + 2)へと拡張する
H = 4
W = 3
field = [
[1,2,3],
[4,5,6],
[7,8,9],
[1,2,3]]
sentinel = []
#ダミーデータを0とする
sentinel.append([0 for i in range(W + 2)])
for f in field:
sentinel.append([0,*f,0])
sentinel.append([0 for i in range(W + 2)])
print(sentinel)
#[[0,0,0,0,0],
# [0,1,2,3,0],
# [0,4,5,6,0],
# [0,7,8,9,0],
# [0,1,2,3,0],
# [0,0,0,0,0]]
▽番兵法
配列の前後を拡張することで、例外処理を省いて効率化
フラグを使わずにbreakで抜けた際の処理
- 問題
- 配列を比較し同じ要素番号に同じ値が格納されていれば'Yes'、なければ'No'を出力する
tar_1 = [1, 3, 5, 7, 9, 11]
tar_2 = [2, 4, 5, 8, 10, 12]
フラグを使用する場合
flg = False
# 全要素を走査
for i in range(len(tar_1)):
# 一致すればフラグを立ててbreak
if tar_1[i] == tar_2[i]:
flg = True
break
# フラグによって出力を決める
if flg:
print('Yes')
else:
print('No')
フラグを使用しない場合
# 全要素を走査
for i in range(len(tar_1)):
# 一致すれば'Yes'と出力しbreak
if tar_1[i] == tar_2[i]:
print('Yes')
break
else:
# for文がbreakされなかった場合の処理
print('No')
▽for - else文
注意!
else文はbreakされなかった場合のみ通らないので、
そもそもfor文の中を通らない場合でもelse文が処理される
(今回のだと、len(tar_1)
が0
の場合など)
tag = []
for i in range(len(tag)):
# ここは通らない
else:
# ここは通る