Edited at

Pythonの関数とか文法とか 1


Pythonについて得た知識を箇条書きでアウトプットするだけ

5個たまったら出します.


1.format関数

文字を埋め込むことが出来る関数


format.py

文字列{}文字列.format(変数)


{}を埋め込みたい場所に書く.()の中身の変数が埋め込まれる.

また,埋め込みたい文字が複数ある場合は,{}の中身に埋め込みたい順番を0から書く.


2.map関数

関数を引数にとる謎関数.

競技プログラミングでは入力で良く使われます.(入力だけの記事を出そうと思います.)

それが以外ではlambda式と使われることが多いようなので,それをまとめたいと思います.

lambda式とは,関数名を持たない関数です.いちいちdef~とかしなくても簡単な処理だったらlambda式に投げればよいみたいです.


map.py

l=list(range(10))

mapped_list=list(map(lambda x:x**2,l))
#[0,1,4,9,16,25,36,49,64,81]

map関数は

map(式,リスト)

から成り立ちます.

lambda式は

lambda 変数:式

から成り立ちます.この場合は,xを二乗する式です.

よって,リストlに対してそれぞれ2乗する式ということです.概念として難しい・・・


3.input関数

input関数はPython3では,すべて文字列としてみなされる.

よって,数値として与えたい場合は,int関数やfloat関数で変換してあげる必要がある.

一行に複数の文字を与えたい場合は以下のコード


input.py

a,b=map(int,input().split())


上記コードは二つの整数値を与えると分かっているとき.空白で区切って二つ入力する.

一行に複数の文字を与えたいが,いくつ与えるかばらばらの時は以下


inputbara.py


#入力回数の設定
N=int(input())

#1 内包表記
a=[input() for i in range(N)]
#2 または
for i in range(N):
a.append(input())
#2 さらにまたは 
a=list(map(int,input().split()))



4.最大公約数と最小公倍数を求める

・最大公約数(gcd:greatest common divisor)

Pythonの標準ライブラリに最大公約数を返す関数が入っています.僕は,AtcoderでPython 3.4.3を使うので以下の様なコードを書くことになります.


gcd.py

import fractions

a,b=map(int,input().split())
print(fractions.gcd(a,b))

これで最大公約数がprintされます.

Python 3.5以降を使っている人は以下のようにする必要があります.


gcd_3_5.py

import math

a,b=map(int,input().split())
print(math.gcd(a,b))

gcd.pyは2つの整数の公約数を求めるものでしたが,N個の整数が与えられた時は以下のコードで最大公約数を求めます.


gcd_N.py

import fractions

#N個の整数の入力
a=list(map(int,input().split()))
#ansをa[0]と置く
ans=a[0]
#ansに一つ前のansとa[i]の最大公約数を代入する
for i in range(1,N):
ans=fractions.gcd(ans,a[i])
print(ans)

・最小公倍数(lcm:least common multiple)

最小公倍数も最大公約数とほぼ同様です.ただし,最小公倍数はライブラリに関数がありません.そこで,最大公約数から最小公倍数を求める式を用います.

lcm(a,b)=a*b/gcd(a,b)が成り立ちます.

よって,以下のコードで最小公倍数を求めることが出来ます.


lcm.py

import fractions

a,b=map(int,input().split())
print(a*b//fractions.gcd(a,b))


lcm_N.py

import fractions

a=list(map(int,input().split()))
ans=a[0]
for i in range(1,N):
ans=ans*a[i]//franctions.gcd(ans,a[i])
print(ans)


5.startswith,endswithメソッド

特定の文字列で始まる/終わるを調べる時に用いるメソッド.


startend.py

l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']

l_start=[s for s in l if s.stratswith("t")]
print(l_start)
#['twoXXXbbb','three999aaa']

l_end=[s for s in l if s.endswith("a")]
print(l_end)
#['oneXXXaaa','three999aaa']

内包表記素晴らしい.