Help us understand the problem. What is going on with this article?

Python3 備忘録自分用

Python 大きい値を保存しておく

ans = max(ans,n)

ソートについて

このような形の場合におけるソートを行う方法

ab 5
ab 4
ab 3
fds 4
fao 3

このような際に名前が辞書順でありかつ値が小さい方が先にくるというソートをしたい場合は

S = []
S.append((s, -n, i))
S.sort()

として、値をマイナスにすることによって求めているソートを行うことが出来るようになるそして、iがもともとのリストから何番目に来るのかということがわかる。


区切りをつけた数値の入力方法

例) N M C (数値)

N,M,C =map(int, input().split())

数値の行列の入力方法

A = []
for i in range(N):
    array = list(map(int, input().strip().split()))
    A.append(array)

数値の桁数を調べる方法

print(len(str(A)))

回数がわからない場合の縦に数値が並んでいる場合

while True:
    x = int(input())
    if x == 0:
        break #whileから抜ける

文字を行列のように表示する方法

ex)
★★★★★
★★★★★
★★★★★
★★★★★

    for i in range(0,a):
        for j in range(0,b):
            print("#", end="")
        print()#改行をしてくれる

改行

print()#これだけでOK

リストの逆順にする方法

[::-1]をつけることでリストを逆順で表示できる#[::-1]をつけることでリストを逆順で表示できる

for i in range(0,n):
    print(a[::-1][i] ,end=" ")

数字の文字列からなるリストのソート方法

l = ['10', '1', '5']

print(sorted(l, key=int))
# ['1', '5', '10']

単なる.sort()ではなくsorted(l,key=int)を用いることによってソートすることが出来る。

n*mの行列の入力および計算方法

#入力例
3 4
1 2 0 1
0 3 0 1
4 1 1 0
1
2
3
0

n*mの行列及び、m*1の行列計算を行うことが出来る↓

n,m = map(int, input().split())
l = [0]*n
for i in range(0,n):
    l[i] = list(map(int, input().split()))#n*mの行列の入力
c = [int(input()) for i in range(m)]#m*1の行列入力

sum = [0]*n

for i in range(0,n):
    for j in range(0,m):
       sum[i] = sum[i] + l[i][j]*c[j]

文字列の比較

入力が同じ形式であれば、以下のような文字列同士の比較を行うことも出来る

if(S <= "2019/04/30"):
    print("Heisei")
else:
    print("TBD")

 リストを空白区切りだけで出力する。

L = [10,20,30,40]
print(' '.join(map(str, L)))
#出力例
10 20 30 40

文字列と数値が同じ列で入力に来た場合

2
10000 JPY
0.10000000 BTC

このような場合の対処方法

N =int(input())
sum = 0
for i in range(0,N):
  N,M =map(str, input().split())

ここでは一度変数に入れて毎回更新を行う方法をとっているこの問題の場合は必要なものが合計値であったためこのような方式をとった。

リストにおけるfor文の使い方

for ans in answers:
  for a in ans[1:]:
    foods[a-1] += 1

これによってfoodsの配列の値の増加が出来る。
上の例だとanswersの配列をひとつづつ

answers = [[2, 1, 3], [3, 1, 2, 3], [2, 3, 2]]

ansの中にanswersの中のリストがひとつづつansの中に入るようになっている。その中からans[1:]添え字1から最後までのfor文でまわしている。
ansの中の値がaになっている。

 アルファベットの列挙

アルファベットの列挙したリストの表示

al=[chr(ord('a') + i) for i in range(26)]
print(al)
## ord: アスキーコードを取得
## chr: アスキーコードから文字へ

素因数分解

素因数分解を行うコードpfにリストとして、素因数が保存される。

pf={}
m=341555136
for i in range(2,int(m**0.5)+1):
    while m%i==0:
        pf[i]=pf.get(i,0)+1
        m//=i
if m>1:pf[m]=1
print(pf)

複数文字列の変換を行う方法

S='54IZSB'
S = S.translate(str.maketrans("ODIZSB","001258"))
print(S)
Ex output) 541258 (この場合三文字目以降のIZSBが1258に入れ替わっている。
#第一引数の部分的に同じところを第二引数に変換を行うことが出来る。

累積和の実装方法について

A = [3, 8, 2, 9, 3, 9, 10, 6]
N = len(A)

S = [0]
for i in range(0, N):
 S.append(S[i] + A[i])
#Sが累積和となっているためそれを利用することによって区間における計算を行うことが出来る。
# 配列A の区間 1 ~ 3 の総和は
S_1_3 = S[3] - S[1]
print(S_1_3)

Pythonのプログラムにおいて途中で終了する方法

C言語における早期リターンのような機能を探していた。
そのための方法としてexit()が存在している。

exit()

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした