1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【自分用】Pythonで覚えておきたい操作集 - 競技プログラミング初心者向け

Last updated at Posted at 2024-06-25

この記事を書いたきっかけ

プログラミングの問題を解いていると、特定の操作でつまずくことがよくありました。この記事では、よくわかっていない操作だけを一覧にし、自分がどこでつまずいているのかを自覚するためにまとめました。

競技プログラミングサイト「AtCoder」の「Python入門 AtCoder Programming Guide for beginners (APG4bPython)」に取り組み、自分が不安な操作を集めました。何度もこの記事を見直して、「絶対にわかる!」という状態にしたいです。もし、すべての操作が自信を持てるようになったら、この記事を削除するかもしれません。

Pythonの記法は一通り覚えたけど、特定の問題でうまくいかないという方は、この方法を参考にしてみてください。

操作集

出力

複数の要素の間に特定の文字列を挿入したい

print("Hello, world!", 123, sep="\n")
# 出力結果
# Hello, world!
# 123

スペース区切りで出力したい

end= で「出力後に挿入する文字列」を指定する

print("Hello, world!", end=" ")
print(123)

# 実行結果
# Hello, world! 123

コメントしたい(2種類)

# 123
# 456
# と出力するプログラムです
print(123)
print(456)
 
"""
print は受け取った要素を出力する
最後に改行が自動で挿入される
"""

プログラムの書き方

改行したい

セミコロン(;)で改行する。複数の実行文を 1 行にまとめて記述することができる。

print("hello"); print(123)

# 実行結果
# hello
# 123

一つの実行文を複数の行に分けて記述したい

バックスラッシュ( \ )を用いて書く

res = 1 + 2 + 3 + 4 \
     + 5 + 6 + 7 + 8
print(res)
# 実行結果
# 36

計算式

商と余りを一度に取得したい

q, r = divmod(20, 7)
print(q)  # 2
print(r)  # 6

複合代入演算子を使いたい

複合代入演算子 コード例 複合代入演算子を使わない書き方
+= x += 3 x = x + 3
-= x -= 3 x = x - 3
*= x *= 3 x = x * 3
//= x //= 3 x = x // 3
/= x /= 3 x = x / 3
**= x **= 3 x = x ** 3
%= x %= 3 x = x % 3

int型とfloat型同士の計算結果

片方が int 型、片方が float 型の場合の和・差・積は float 型になる。

a = 3.5
b = 4
print(a + b)  # 7.5
print(a - b)  # -0.5
print(a * b)  # 14.0

int 型同士のべき乗

a と b がともに int 型のとき、 a ** b の型は、
b≥0 場合は int 型、
b<0 の場合は float 型になります。

print(2 ** 3)   # 8
print(2 ** -3)  # 0.125

入力

空白区切りの入力を受け取って、別々の変数に格納したい

a, b, c = map(int, input().split())
print(a)
print(b)
print(c)
# 入力例
# 10 20 30
# 実行結果
# 10
# 20
# 30

for文・While文

ループを抜けたい (break)

# break がなければこのループは i == 4 まで繰り返す
for i in range(5):
    if i == 3:
        print("ぬける")
        break  # i == 3 の時点でループから抜ける
 
    print(i)
 
print("終了")

# 実行結果
# 0
# 1
# 2
# ぬける
# 終了

後の処理をとばして次のループへ進みたい (continue)

for i in range(5):
    if i == 3:
        print("とばす")
        continue  # i == 3 のとき これより後の処理を飛ばす
 
    print(i)
 
print("終了")

# 実行結果
# 0
# 1
# 2
# とばす
# 4
# 終了

逆順にループしたい(降順)

一般的に、range(N) を逆順にするときは range(N - 1, -1, -1) と書くことになる

for i in range(5, -1, -1): 
    print(i)

# 実行結果
# 5
# 4
# 3
# 2
# 1
# 0

リスト

簡単にリストを作りたい

list(for文に入れられるもの) でリストを作ることができる

# リスト [0, 1, 2, 3, 4] を作る
a = list(range(5))

# 文字列からリストを作る
a = list("AtCoder")

# a = ["A", "t", "C", "o", "d", "e", "r"]

for 文でリストの要素を列挙する

a = [3, 1, 4, 1, 5]
 
# a の要素を順に x に代入し、繰り返し処理を行う
for x in a:
    # 5 回実行される
    print(x)

# 出力結果
# 3
# 1
# 4
# 1
# 5

入力からリストを作りたい

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

# 入力
# 886 551 37 424 531
# 出力
# [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 と値 x に対し、a.append(x) で a の末尾に要素 x を追加できる
  • リスト a に対し、a.pop() で a の末尾の要素を取得しながら削除できる
  • リスト a と整数 i と値 x に対し、a.insert(i, x) で a の i 番目の位置 (a[i-1] と a[i] 間) に x を挿入することができる
  • リスト a と整数 i に対し、a.pop(i) で a の i 番目の要素を取得しながら削除することができる

a = []
a.append(1)  # a は [1] になる
a.append(2)  # a は [1, 2] になる
a.append(3)  # a は [1, 2, 3] になる

print(a.pop())  # 3 を出力し、a は [1, 2] になる
print(a.pop())  # 2 を出力し、a は [1] になる
print(a.pop())  # 1 を出力し、a は [] になる

リストの要素を削除したい

  • del 文は指定されたインデックスの要素を削除する
  • del 変数名[削除したいインデックス] のように使う
l = [0, 10, 20, 30, 40, 50]

del l[0]
print(l)
# [10, 20, 30, 40, 50]

リストの中に x があるか調べたい

  • リスト a と値 x に対し、x in a で x が a の中に 1 個以上存在するかを判定することができる
    • not (x in a) は x not in a と書くこともできる
  • リスト a と値 x に対し、a.count(x) で x が の中に何個存在するかを取得することができる
  • リスト a と値 x に対し、a.index(x) で a の中に x が出現する最初の位置を取得することができる
# x が 1, 2, 3 のいずれかであるかを判定する
x = 2
print(x in [1, 2, 3])

a = [3, 1, 4, 1, 5]
print(a.count(1))  # 1の数を数える
print(a.index(1))  # 最初の1の位置を調べる

リストをソートしたい

  • a.sort() で a の要素を昇順に並べ替えることができる
  • sorted関数でa の要素を昇順に並べ替えることができる
    • sorted関数で文字列をアルファベット順に並べ替えることもできる
a = [3, 1, 4, 1, 5]
a.sort()
print(a)  # [1, 1, 3, 4, 5]

a = [3, 1, 4, 1, 5]
new_a = sorted(a)
print("元のリスト:", a)  # [3, 1, 4, 1, 5]
print("新たなリスト:", new_a)  # [1, 1, 3, 4, 5]

l = ["diamond", "apple", "birth", "choco"]
print(sorted(l)) # ['apple', 'birth', 'choco', 'diamond']

リストを反転したい

a.reverse() で a の要素を逆順に並べ替えることができます。

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

文字列

部分文字列に x があるか調べたい

  • 文字列 s,t に対し、t in s で s の部分文字列に t が含まれるかどうか判定することができる
  • 文字列 s,t に対し、s.index(t) で s に現れる最初の部分文字列 t の位置を求めることができる
  • 文字列 s,t に対し、s.count(t) で s に部分文字列 t が重ならずに何回出現するかを求めることができる
s = "ABABABA"
print("BAB" in s)
print(s.index("BAB"))
print(s.count("BAB"))
print("AAAAAAAAAA".count("AAA"))

# 出力
# True
# 1
# 1
# 3

部分文字列を置換したい

  • 文字列 s,t,u に対し、s.replace(t, u) で s に重ならずに出現する部分文字列 t をすべて u に置き換えた文字列を取得できる
print("1 + 2 + 3".replace("+", "**"))
print("AAAAA".replace("AA", "X"))

# 出力
# 1 ** 2 ** 3
# XXA

大文字・小文字かどうか判定したい

  • 文字列 s に対し、s.isupper() で s の文字がすべて大文字かどうか判定することができる
    • より正確には、s.isupper() は s に大文字が含まれていて、小文字が含まれないとき True を返す
  • 文字列 s に対し、s.islower() で s の文字がすべて小文字かどうか判定することができる
    • より正確には、s.islower() は s に小文字が含まれていて、大文字が含まれないとき True を返す
print("ATCODER".isupper())  # True
print("atcoder".islower())  # True
print("".islower())  # False

数字かどうか判定したい

  • 文字列 s に対し、s.isdigit() で s が空でなく、s の文字がすべて数字かどうか判定することができる
print("0123456789".isdigit())  # True
print("ABC123".isdigit())  # False
print("".isdigit())  # False

大文字・小文字に変換したい

  • 文字列 s に対し、s.upper() で s の小文字をすべて大文字に変換した文字列を取得できる
  • 文字列 s に対し、s.lower() で s の大文字をすべて小文字に変換した文字列を取得できる
print("AtCoder".upper())  # ATCODER
print("AtCoder".lower())  # atcoder

要素をつなげて出力したい

文字列.join()で文字列を結合した文字列を返す

# リストの要素をスペースで結合
words = ["Hello", "world"]
sentence = " ".join(words)
print(sentence)  # Hello world

# リストの要素をカンマで結合
fruits = ["apple", "banana", "cherry"]
fruit_string = ", ".join(fruits)
print(fruit_string)  # apple, banana, cherry

# リストの要素をそのまま結合
letters = ["A", "t", "C", "o", "d", "e", "r"]
word = "".join(letters)
print(word)  # AtCoder

# リストの要素を改行で結合
lines = ["Line 1", "Line 2", "Line 3"]
paragraph = "\n".join(lines)
print(paragraph)
# 出力:
# Line 1
# Line 2
# Line 3

まとめ

よくわかっていない書き方が30個近くありましたが、これらをひとつずつ覚えて使いこなせるようになれば、解ける問題もひとつずつ増えていくはずです。根気強く取り組んでいきたいと思います。

この「覚えておきたい操作集」はあくまで私個人のものですが、Python初心者の方はぜひ参考にしてみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?