大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【Python】paizaでよく使う構文

※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。

概要

paizaでよく使う構文をまとめました。

内容

入力値をまとめて取得

import sys

input_lines = sys.stdin.read().splitlines()



リスト内の型変換

converted_list = list(map(int, input_list))



文字列を分割してリストで取得

splited_list = input_str.split(' ')



リストを結合して出力

print(' '.join(print_list))



2次元リストの転置

transposed_lists = [list(i) for i in zip(*lists)]
transposed_lists = list(map(list, zip(*lists)))



順列・重複ありの2次元リスト

import itertools

h_index = range(h)
w_index = range(w)

lists = [list(i) for i in itertools.product(h_index, w_index)]



連続した値を等間隔の2次元リストで取得

import numpy as np

continuous_lists = [list(i) for i in np.arange(1, h * w + 1).reshape(h, w)]



1次元リストを等間隔で分割

one_dimensional_list = [1, 2, 3, 4]
# 分割後の1次元リストに何個データが入っているかの定義
item_count = 2

def make_set_list(one_dimensional_list, item_count, split_count):
    start_index = split_count * item_count
    end_index = (split_count + 1) * item_count
    return one_dimensional_list[start_index:end_index]

# 分割数分、ループを回す
set_lists = [make_set_list(one_dimensional_list, item_count, i) for i in range(2)]



同じ値を10個持ったリストの作成

result = [0] * 10



リストの中身を逆順にする

result = list(reversed([1, 2, 3]))



2次元のリストを1次元に変換する

# 処理が遅いので、リスト内包表記やitertoolsを使用するのもあり
result = sum([[1], [2], [3]], [])

# リスト内包表記
result = [j for i in [[1], [2], [3]] for j in i]



参照渡しではない1次元リストのコピー

a = [1, 2, 3]

# 1
result = a[:]

# 2
result = list(a)

# 3
import copy
result = copy.copy(a)

# 多層構造のリストのコピーはcopyモジュールのdeepcopyを使用する



辞書をキーでソート

d = {"b": "1", "a": "2", "c": "3"}

d = dict(sorted(d.items()))
print(d)