【Python】アルゴリズム問題を解く際によく使う小技集


自分の備忘録もかねて随時追加していきます。
キーワードを書いておくのでそれでググれば詳細は出てくると思います。
▽:キーワードマーク

空白区切りの文字列を数値配列に変換

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]]

▽番兵法
配列の前後を拡張することで、例外処理を省いて効率化