【Python】paizaでAランクを最速でとるチートシート

## はじめに
エンジニアなら誰でも一度は通るpaiza。
とはいえ、paizaではコーディングスキルよりもPaiza力みたいなものも求められます(笑)

paiza特有の入力などの形式に時間を使うのではなく
思考するべきところに時間を使えるようにするのが高ランク取得のコツです。

そこでこの記事では、個人的にオススメなPaizaのチートシートを共有します。

非エンジニアである私はこのシートを活用してAランクをgetしました（↓） ので
　「なかなかランクアップできないよ」とお悩みの方はぜひご活用ください〜
 
 ※スクリーンショット
![スクリーンショット 2024-07-06 17.16.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508305/79750887-d90c-9982-5017-b76e488a5743.png)

## チートシート
Pythonの文法書であればキレイに抜け漏れなく情報を整理するとは思いますが
本記事ではpaizaのチートシートなので本当によく使うコードに絞ってまとめています。

例えば、B〜Aランクで頻出する二次元配列問題なんかは
このチートシートがあれば実装が楽〜になります。

### 基本の文法
・型変換
```python
#文字列→数字
int(n)

#数字→文字列
str(n)
```

・ループ処理を抜けて終わらせる
```python
for i in [1, 2, 3, 4]:
  if i == 2:
    print(i)
    break
    
#出力結果
1
2
```

・ループ処理を一部抜ける
```python
for i in [1, 2, 3, 4]:
  if i == 2:
    print(i)
    continue
    
#出力結果
1
3
4
```

・切り捨て
```python
import math
#小数点以下切り捨て
a = math.floor(500/80))
```

### 標準入力
・一番基礎。1行ずつ取り出す。
```python
#文字列で取り出す
l = input()
#数値で取り出す
l = int(input())
```

・入力が縦に連なっている場合
```python
#入力データ
#5
#10
#15

l = [input() for i in range(3)] #3はデータ数

#リストのデータ数だけ実施する場合
l = [input() for i in range(len(list1))]

#出力結果
#list形式で取得する。
l=["5","10","15"]
```

・入力を整数として取得したい場合
```python
#入力データ
#5
#10
#15
l = [int(input()) for i in range(3)]
l = [int(input()) for i in range(len(list1))]

#出力結果
#list形式で取得する。
l=[5,10,15]
```

・入力が横に連なっている場合
```python
#入力データ
#5　10　15

l=input().split() 

#出力結果
#list形式で取得する。
l=["5","10","15"]
```

・（より実践的でおすすめ）　map関数を使用するver.
```python
#入力データ
#5　10　15

l = list(map(int, input().split()))
#出力結果
#list形式で取得する。
l=[5,10,15]

H, W, N = map(int, input().split())
#出力結果
H=5, W=10, N=15
```

※mapについてわかりやすい記事はこちら
https://qiita.com/kubochiro/items/b32a3f723addae752a38

### リスト処理
・リストの各要素を変換
```python
#要素をstrに
l = list(map(str, list1))

#要素を2倍に
l = list(map(lambda x: x*2, list2))
```

・文字列をリストにする
```python
l = list("あいうえお")

#出力結果
["あ", "い", "う", "え", "お"]
```

・リストの要素を結合する
```python
myList = ["あ", "い", "う", "え", "お"]
l = "".join(myList)

#出力結果
"あいうえお"
```

・リストの要素を結合する（区切り文字を入れる）
```python
#“”の中には区切り文字を入れることが可能
myList = ["あ", "い", "う", "え", "お"]
l = ' '.join(myList)
#出力結果
"あ い う え お"

l = ', '.join(myList)
#出力結果
"あ, い, う, え, お"
```

・リストをn個ずつのリストに切り分ける
```python
n = 5
for i in range(0, len(data), n):
    print(data[i: i+n])
```

・リストが空か確認する
```python
if len(a)==0:
#もしくは
if a == []:
```

・リストに要素が含まれるかの確認
```python
list1 = [10,15,20]
15 in list

list2 = ["a", "A", "b", "c", "C"]
"b" not in list2

#母音を除いたリストを作成
list3 = ["p", "a", "i", "z", "a", "a", "k", "i", "t", "a", "o"]
new_list = [i for i in list1 if i not in ["a","i","u","e","o","A","I","U","E","O"]]
```

・リストの要素全てについて条件が当てはまるか
```python
l = [0, 1, 2, 3, 4]
all([i > 2 for i in l])

#出力結果
False
```

・リストの要素いずれかについて条件が当てはまるか
```python
l = [0, 1, 2, 3, 4]
any([i > 2 for i in l])

#出力結果
True
```


・好きな要素数のリストを作成
```python
l = [0] * 10

#出力結果
[0000000000]
```

### 2次元配列系
B以降のランクは2次元配列の問題が多い

```python
#高さと幅を取得
H, W = map(int, input().split())

・inputデータに基づく2次元配列を作成する
#空白の要素で2次元配列を作成した後、inputデータに置換していく
text_array = [[""] * W for _ in range(H)]
for i in range(H):
    text = list(input())
    for j in range(W):
        text_array[i][j] = text[j]
```

・（より実践的）inputデータに基づく2次元配列を作成する
```python
s = [list(input()) for _ in range(H)]   
#要素をintにしたい場合
s = [list(map(int, list(input().split()))) for _ in range(H)]
```

・二次元配列の転置
```python
#元のリスト
list_org = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
list_transposed = [list(x) for x in zip(*list_org)]

#出力結果
 [[0, 3, 6], [1, 4, 7], [2, 5, 8]]
```


```python
#別の方法
for y in range(H):
    for x in range(W):
        print(s[y][x], end="")
    print()

```



## おわりに
いかがだったでしょうか。使えるチートコードはありましたか？

ちなみに、paizaを通じて言語自体と論理的思考力の勉強にはなりますが、
個人的には実務に勝る勉強はないと思います。

paizaではそれなりのランク（Aランクくらい）をサクッと取得し
paizaはそこそこに切り上げてしまって、実務で経験を積んでいきましょう！