見出し画像

【Python】paizaでよく使うコード集

こんにちはmaomaoです。

ここではpaizaでよく使うコードを備忘録としてまとめていきたいと思います。

2次元リスト作成・出力

まずは、落ちものパズルやマップを移動する問題等でよく出てくる2次元リストの作成です。
paizaの問題ではこの2次元リストの作成することが多いので覚えておいて損は無いと思います。

H,W =map(int,input().split())
field =[]
# 2次元リストマップを作成
for i in range(H):
   sub_field =[]
   for j in range(W):
       sub_field.append(".")
   field.append(sub_field)

上記のコードで入力値に応じて「"."」が入った2次元リストが作成されます。(H、Wはそれぞれ行数、列数の入力値です。)

上記に加え、下記のコードを足し、

for lines in field:
   for char in lines:
       print(char,end="")
   print()#改行に対応 

コードを実行すると下記のような出力結果になります。
これは7行5列の2次元リストに格納された「"."」を示しています。

画像1

リストから最大値のインデックスを取得する

リストから最大値のインデックスを取得するにはindex()とmax()を組み合わせればできます。
ただし下記のコードで取得できるインデックスは最初に見つかったものです。

list =[1,2,9,5,9,4,7,9]

# 最初に見つかった最大値のインデックスを取得する
print(list.index(max(list)))

# 3

リスト内に複数最大値の要素がある場合は下記のようなコードを実行すると各インデックスが取得できます。

list =[1,2,9,5,9,4,7,9]
max_index =[i for i,x in enumerate(list) if x == max(list)]

print(max_index)
# [2,4,7]

アルファベットをまとめてリスト内に作成

アルファベットをまとめてリストに入れたい場合は下記のコードが便利です。

# アルファベットを格納
char_list = [ chr(ord('a')+num) for num in range( 26 ) ]

print(char_list)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
# 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

複数入力値を数値でリストで格納

入力する値を一度に数値型に変換してリストの中に格納する方法です。
一つの変数に格納するときに使います。

 #input >1 2 3 4 5
num_list = [int(i) for i in input().split()]

print(num_list)
# [1,2,3,4,5]

リストに格納された数値をきれいに見せる

paizaの出力用にリストの中身(数値)をきれいに見せる方法です。

num_list = [8,4,5,3,9]

num_list =[str(i) for i in num_list]
num_list =" ".join(num_list)
print(num_list)

# 8 4 5 3 9

これを「For」で繰り返すと下記のように複数行出力させることもできます。

num_field =[[1,2,3],[[4,5,6]],[7,8,9]]

for num_list in num_field:
    num_list =[str(i) for i in num_list]
    num_list =" ".join(num_list)
    print(list)

# 1 2 3
# 4 5 6
# 7 8 9

リストから複数の要素を削除する

リストの要素を複数削除する際、下記のようなコードだとずれて削除されてしまいます。

list = ["a", "b", "c", "d", "e", "f", "g"]
del_list = [1, 3, 4]  # 消したい要素のインデックス

for i in del_list:
   del list[i]

print(list)#b,d,eが削除されて欲しいのにずれて削除されてしまう!!

これはリストのインデックスを小さい方から削除したことでずれてしまったことが原因でした。
そのため下記のようにリストをsorted関数で降順に並び替えてあげるときれいにリストの要素が複数削除できます。

list = ["a", "b", "c", "d", "e", "f", "g"]
del_list = [1, 3, 4]  # 消したい要素のインデックス

for i in sorted(del_list, reverse=True):
   del list[i]

print(list)#b,d,eが削除される

リスト内の重複した要素を削除(元の順番を保持)

リスト内で重複した要素を削除したい場合、set関数を使うと思いますがこのままだと元の順序が保持されません。
元の順序を保持して重複削除したい場合はsorted関数の引数keyでリストのインデックスを呼び出すことで元の順番を保持したまま重複を削除できます。

words = ["cat", "dog", "rabbit", "bird", "cat", "cat", "dog"]
print(sorted(set(words), key=words.index))
# ['cat', 'dog', 'rabbit', 'bird']

数値をリスト化

12345のような数値を1桁ずつリストに格納するには下記のように記載するとできます。

n =12345
l =[int(x) for x in list(str(n))]
print(l)
# [1,2,3,4,5]

元に戻すにはmap関数でまとめて文字型にした後にjoinメソッドで結合することで可能です。

l =[1,2,3,4,5]
l =map(str,l)
print(int("".join(l)))
# 12345

この記事が気に入ったらサポートをしてみませんか?