LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-25

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

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

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:
    # ここは通る
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1