paizaラーニングレベルアップ問題集の配列活用メニューを、numpyとpandasを使ってやってみました。
指定の要素のカウント
問題
numpy
import numpy as np
N, K = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
print(np.count_nonzero(A == K))
pandas
import pandas as pd
N, K = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
print(A[A == K].size)
全ての要素の和
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
print(A.sum())
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
print(A.sum())
配列の最大値
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
print(A.max())
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
print(A.max())
配列の最小値
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
print(A.min())
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
print(A.min())
指定要素があるかの判定
問題
numpy
import numpy as np
N, K = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
print("Yes" if np.any(A == K) else "No")
pandas
import pandas as pd
N, K = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
print("Yes" if A.isin([K]).any() else "No")
指定要素の先頭位置
問題
numpy
import numpy as np
N, K = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
indices = np.where(A == K)[0]
print(indices[0] + 1 if indices.size else -1)
pandas
import pandas as pd
N, K = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
indices = A[A == K].index
print(indices[0] + 1 if indices.size else -1)
要素の種類数
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
B = np.bincount(A)
print(np.count_nonzero(B))
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
print(A.nunique())
全ての要素に対する操作
問題
numpy
import numpy as np
N, K = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
B = A + K
for b in B:
print(b)
pandas
import pandas as pd
N, K = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
B = A + K
for b in B:
print(b)
配列の順序の反転
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
B = np.flip(A)
for b in B:
print(b)
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
B = A.iloc[::-1]
for b in B:
print(b)
変数の入れ替え
問題
解答例
X, Y = map(int, input().split())
X, Y = Y, X
print(X, Y)
指定要素の入れ替え
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
X, Y = map(lambda i : int(i) - 1, input().split())
A[X], A[Y] = A[Y], A[X]
for a in A:
print(a)
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
X, Y = map(lambda i : int(i) - 1, input().split())
A[X], A[Y] = A[Y], A[X]
for a in A:
print(a)
末尾への要素の追加
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
B = np.append(A, int(input()))
for b in B:
print(b)
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
B = pd.concat([A, pd.Series([int(input())])], ignore_index=True)
for b in B:
print(b)
指定位置への要素の追加
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
n, b = map(int, input().split())
B = np.insert(A, n, b)
for b in B:
print(b)
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
n, b = map(int, input().split())
B = pd.concat([A.iloc[:n], pd.Series(b), A.iloc[n:]])
for b in B:
print(b)
指定要素の削除
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
B = np.delete(A, int(input()) - 1)
for b in B:
print(b)
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
n = int(input())
B = pd.concat([A.iloc[:n-1], A.iloc[n:]])
for b in B:
print(b)
九九表
問題
numpy
import numpy as np
A = np.arange(1, 10)
M = np.outer(A, A)
for row in M:
print(*row)
pandas
import pandas as pd
s = pd.Series(range(1, 10))
df = s.to_frame().dot(s.to_frame().T)
for row in df.iterrows():
print(*row[1])
全ての要素を用いた処理
問題
numpy
import numpy as np
N = int(input())
A = np.array([int(input()) for _ in range(N)])
M = np.outer(A, A)
for i in np.arange(1, N):
for j in np.arange(i):
print(M[i][j])
pandas
import pandas as pd
N = int(input())
s = pd.Series([int(input()) for _ in range(N)])
df = s.to_frame().dot(s.to_frame().T)
for i in range(1, N):
for j in range(i):
print(df.iloc[i, j])
配列のサイズの変更
問題
numpy
import numpy as np
N, n = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
A.resize(n)
for a in A:
print(a)
pandas
import pandas as pd
N, n = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
A = A.reindex(range(n)).fillna(0).astype(int)
for a in A:
print(a)
重複要素の削除
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
uniq = np.unique(A, return_index=True)
for i in np.sort(uniq[1]):
print(A[i])
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
for a in A.unique():
print(a)
条件を満たす要素のみの配列作成
問題
numpy
import numpy as np
N, K = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
B = A[A >= K]
for b in B:
print(b)
pandas
import pandas as pd
N, K = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
B = A[A >= K]
for b in B:
print(b)
傾斜配点
問題
numpy
import numpy as np
N = int(input())
M = np.array([int(m) for m in input().split()])
max_score = -np.inf
for _ in range(N):
A = np.array([int(a) for a in input().split()])
score = M @ A
if score > max_score:
max_score = score
print(max_score)
pandas
import pandas as pd
N = int(input())
M = pd.Series([int(m) for m in input().split()])
max_score = pd.NA
for _ in range(N):
A = pd.Series([int(a) for a in input().split()])
score = M.dot(A)
if pd.isna(max_score) or score > max_score:
max_score = score
print(max_score)
内定
問題
numpy
import numpy as np
N, K, M = map(int, input().split())
A = np.array([int(input()) for _ in range(N)])
B = np.sort(A)[~M::-1]
print(np.sum(B >= K))
pandas
import pandas as pd
N, K, M = map(int, input().split())
A = pd.Series([int(input()) for _ in range(N)])
B = A.sort_values(ascending=False, ignore_index=True)[M:]
print(B[B >= K].size)
queue(9)係
問題
numpy
import numpy as np
N = int(input())
A = np.array([], dtype=int)
for _ in range(N):
query = input().split()
if query[0] == "in":
A = np.append(A, int(query[1]))
elif query[0] == "out":
A = A[1:]
for a in A:
print(a)
pandas
import pandas as pd
N = int(input())
A = pd.Series([], dtype=int)
for _ in range(N):
query = input().split()
if query[0] == "in":
A = pd.concat([A, pd.Series([int(query[1])])], ignore_index=True)
elif query[0] == "out":
A = A.iloc[1:]
for a in A:
print(a)
二人三脚
問題
numpy
import numpy as np
A = np.array([int(input()) for _ in range(int(input()))])
A.sort()
D = np.diff(A)
k = np.where(D == D.min())[0][0]
print(A[k])
print(A[k+1])
pandas
import pandas as pd
A = pd.Series([int(input()) for _ in range(int(input()))])
A = A.sort_values(ignore_index=True)
D = A.diff()[1:]
k = D[D == D.min()].index[0]
print(A[k-1])
print(A[k])
場所取り
問題
numpy
import numpy as np
_, K, F = map(int, input().split())
A = np.array([int(input()) for _ in range(K)])
uniq = np.unique(A[F:], return_index=True)
for i in np.sort(uniq[1]):
print(A[F+i])
pandas
import pandas as pd
_, K, F = map(int, input().split())
A = pd.Series([int(input()) for _ in range(K)])
uniq = A[F:].unique()
for a in uniq:
print(a)
ボウリング
問題
numpy
import numpy as np
P = np.array([], dtype=int)
for _ in range(4):
P = np.concatenate([P, np.array([int(p) for p in input().split()])])
print(10 - np.where(P == 1)[0][-1])
print(P.sum())
pandas
import pandas as pd
P = pd.Series([], dtype=int)
for _ in range(4):
P = pd.concat([P, pd.Series([int(p) for p in input().split()])], ignore_index=True)
print(10 - P[P == 1].index[-1])
print(P.sum())
集団行動
問題
numpy
import numpy as np
N, Q = map(int, input().split())
A = np.arange(1, N+1)
for _ in range(Q):
query = input().split()
s = query[0]
if s == "swap":
a, b = map(lambda x : int(x) - 1, query[1:])
A[a], A[b] = A[b], A[a]
elif s == "reverse":
A = np.flip(A).copy()
elif s == "resize":
c = int(query[1])
if c < A.size:
A.resize(c)
for a in A:
print(a)
pandas
import pandas as pd
N, Q = map(int, input().split())
A = pd.Series(range(1, N+1))
for _ in range(Q):
query = input().split()
s = query[0]
if s == "swap":
a, b = map(lambda x : int(x) - 1, query[1:])
A[a], A[b] = A[b], A[a]
elif s == "reverse":
A = A[::-1].reset_index(drop=True)
elif s == "resize":
c = int(query[1])
if c < A.size:
A = A[:c]
for a in A:
print(a)