🌟

[Python]Atcoderで入茶するために使ったチートシート 🟤

2024/09/06に公開

はじめに

Atcoderで入茶するために作成したチートシートです。(言語はPython)

入力

1つの値を受け取る

# 文字列を受け取る場合
S = input() 

# 整数を受け取る場合
N = int(input()) 

# 小数を受け取る場合
F = float(input())

複数(決まった個数)の値を1行で受け取る

# 文字列を受け取る場合
A, B = input().split()

# 整数を受け取る場合
X, Y, Z = map(int, input().split())

# 小数を受け取る場合
H, M, S = map(float, input().split())

複数の値(決まっていない数)を1行で受け取る

# 文字列を受け取る場合
A = input().split()

# 整数列を受け取る場合
A = list(map(int, input().split()))

# 小数列を受け取る場合
A = list(map(float, input().split()))

複数の値を複数行で受け取る場合

# 複数行の文字列を受け取る場合
A = [input().split() for _ in range(N)]

# 複数行の整数列を受け取る場合
A = [list(map(int, input().split())) for _ in range(N)]

# 複数行の小数列を受け取る場合
A = [list(map(float, input().split())) for _ in range(N)]

出力_print文

改行なしの出力

print(1,end=' ')
print(2,end=' ')

# 出力
1 2 

リスト

入力からリストを作る

# 入力から 1 行読み取り、空白で区切って整数のリストを作る
a = list(map(int, input().split()))
 
print(a)

# input
886 551 37 424 531
# output
[886, 551, 37, 424, 531]

リストを出力する

a = [9, 9, 7, 3]

# a の要素を空白区切りで出力する
print(*a)

# a の要素を改行区切りで出力する
for x in a:
    print(x)

# 出力
9 9 7 3
9
9
7
3

リスト: 後ろから値にアクセスする

a = [3, 1, 4, 1, 5]
 
# 負の添字で後ろから順番に要素を取得
print(a[-1])
print(a[-2])
print(a[-3])

# 出力
5
1
4

# 後ろからすべて取り出す。
for s in A[::-1]:
    print(s)

リストを繋げる

# リスト [1, 6] とリスト [1, 8] をつなげて [1, 6, 1, 8] を作り、a に代入する
a = [1, 6] + [1, 8]
 
# [1, 6, 1, 8] に [0, 3, 3] をつなげて [1, 6, 1, 8, 0, 3, 3] とする
a += [0, 3, 3]
 
# リスト [0, 1, 2] を 3 回繰り返したリスト [0, 1, 2, 0, 1, 2, 0, 1, 2] を作り、a に代入する
a = [0, 1, 2] * 3

インデックスにアクセスする

Pythonのループ内で特定の条件が満たされたときにアイテムのインデックス番号を出力するためには、enumerate関数を使うのが便利です。enumerate関数は、ループ中にインデックスとアイテムの両方を提供してくれます。

A = [[0, 1, 2], [3, 1, 4], [1, 5, 6]]  # 例としてのリスト

for a in A:
    for index, item in enumerate(a):
        if item == 1:
            print(f"itemのインデックス番号: {index}")

リストの中に、特定の文字が何番目(インデックス番号)にあるかを返す

P = [1, 3, 5, 2, 7, 9]  # 例としてのリスト

# リストの中に2が存在するインデックスを返す
index_of_two = P.index(2)
print(index_of_two)

リストを並べ替える

# 昇順に並び替える
a.sort

# 降順に並べ替える
a.sort(reverse=True)

# リストを反転する
a.reverse()

a = [3, 1, 4, 1, 5]

# a を昇順に並び替える。a は [1, 1, 3, 4, 5] になる。
a.sort()
print(a)

# a を反転する。a は [5, 4, 3, 1, 1] になる。
a.reverse()
print(a)

リストの重複を排除する

s = set(a)  # 重複要素を削除した集合を作成

# リストの要素の順序が重要でない、かつ要素がハッシュ可能な場合
a = [7, 3, 3, 2, 5, 8, 2, 5, 6, 5]
s = set(a)  # 重複要素を削除した集合を作成
result = list(s)  # その集合からリストを作成
print(result)  # [2, 3, 5, 6, 7, 8]など

リストの特定のインデックスにデータをinsertする。

  • insert(index, value)で特定のindexにvalueをinsertする。
l = ['a', 'b', 'c']

l.insert(1, 100)
print(l)
# ['a', 100, 'b', 'c']

リストをコピーするが、コピー元と独立にする。

import copy

original_list = [1, [2, 3], 4]
copied_list = copy.deepcopy(original_list)  # 深いコピー

Set

Setの基本

セット(集合)は、リストと同様に複数の要素から構成されるデータです。
ただし、セットはリストと異なり要素の重複がない、また要素の順番もない

セットを作成するには、波括弧で要素を囲みます。
辞書と似ているが、辞書はkey:value形式の点が異なる

set1= {2, 1, 2, 3}
set1 # {1, 2, 3}

セットは組み込み関数でもある

set([1,1,2,2,2,3])
# {1, 2, 3}

set('aabdceabdae')
# {'a', 'b', 'c', 'd', 'e'}

set({'apple' : 3, 'pen' : 5})
# {'apple', 'pen'}

辞書

基本

# 初期化
d = {}

# 追加
# d[key] = value
d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

ソート

# value_降順
sorted_d = dict(sorted(d.items(), key=lambda item: item[1], reverse=True))

# value_昇順
sorted_d = dict(sorted(d.items(), key=lambda item: item[1]))

# key_降順
score_sorted = dict(sorted(score.items(), key=lambda x:x[0], reverse=True))

# key_昇順
score_sorted = dict(sorted(score.items(), key=lambda x:x[0]))

文字列

文字列の中で、ある文字列が何回出現するかを返す:count関数

# aが文字列Sに何回出現するかを返す
S.count('a')

文字列のi番目の文字を取得する

# 文字列 "ABCDE" を作り s に代入する
s = "ABCDE"

# s の 0 番目の文字 "A" を出力する
print(s[0])

# s の最後の文字 "E" を出力する
print(s[-1])

# s の 1 番目から 3 番目までの文字列 "BCD" を出力する。(stopのインデックスは含まない)
print(s[1:4])

# s を逆順にした文字列 "EDCBA" を出力する
print(s[::-1])

文字列を一文字づつ分割してリストに入れる

c = list(input().strip())
print(c)

# 入力が..#の場合、以下のように出力
['.', '.', '#']

# python3.11.4だとc = list(input().split())だとうまくいかなかった。。

便利な関数など

max関数:最大の値を求めるときに使える

# ansとcntを比較して、大きい方をansに格納する
ans = max(ans, cnt)

回文かどうかを判定

A = input()  # 何か文字列を受け取る
B = A[::-1]  # Aを反転させた文字列 
if A == B:
    print("Aは回文")
else:
    print("Aは回文ではない")

三項演算子・リスト内包表記

# 以下のような構文を三項演算子と呼ぶ。例は以下
<true_value> if <condition> else <false_value>

print(A if P.index(A) < P.index(B) else B)

# リスト内包表記
# [<expression> for <item> in <iterable>]
# <expression> は、リストの各要素に適用される式です。
# <item> は、イテラブル(リスト、タプル、文字列、範囲など)から取り出される各要素を指します。
# <iterable> は、反復処理可能なオブジェクトです。

# 以下はリスト内包表記の例
original_list = [1, 2, 3, 4]
doubled_list = [x * 2 for x in original_list]
print(doubled_list)  # 出力: [2, 4, 6, 8]

# リスト内包表記と三項演算子はセットで使われる。
[<true_value> if <condition> else <false_value> for <listの各要素> in <list>]

original_list = [1, 2, 3, 4, 5, 6]
result = ['偶数' if x % 2 == 0 else '奇数' for x in original_list]
print(result)  # 出力: ['奇数', '偶数', '奇数', '偶数', '奇数', '偶数']

Join関数

連結後文字列 = 連結文字列.join(連結させたい文字列が格納されたリスト)

str_list = ['My', 'name', 'is', '山田', '太朗']
result = ' '.join(str_list) # スペースを連結文字列に指定
print(result)

itertools.product : 全ての組み合わせを作成する

import itertools

A = [1,2]
B = [3,4]

combinations = list(itertools.product(A, B))
print(combinations)

# 出力
# [(1, 3), (1, 4), (2, 3), (2, 4)]

Bit全探索でも使える!

import itertools

combinations = list(itertools.product((0, 1), repeat=2))
print(combinations)

# 出力
# [(0, 0), (0, 1), (1, 0), (1, 1)]

functools.cache : メモ化再帰

from functools import cache

@cache
def f(n):
  return n if n <= 1 else f(n - 1) + f(n - 2)

print(f(70))

Discussion