#【python】指定した値で割り算できるペアを求めるプログラム
自分用のメモです。
▼設問
- 正の整数の入ったlistが与えられる.(ar)
- listから整数を2つ抜きだし、合計値がk(正の整数)で割り切れるペアの数を求める.
▼sample input
k=3
ar=[1,3,2,6,1,2]
▼sample output
5
▼my answer
def divisibleSumPairs(n, k, ar):
ans = 0
for n,i in enumerate(ar):
arr=[]
arr =list(map(lambda x:(x+i)%k, ar[n+1:]))
ans += arr.count(0)
return ans
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
nk = input().split()
n = int(nk[0])
k = int(nk[1])
ar = list(map(int, input().rstrip().split()))
result = divisibleSumPairs(n, k, ar)
fptr.write(str(result) + '\n')
fptr.close()
#####考え方 - 組み合わせの全パターンを出す。 - 各要素をkで割った余りを求める。 - 余り=0となった数を足し上げる。
▼一度かけ合わせた組み合わせは除外。
for n,i in enumerate(ar):
print(ar[n+1:])
#------------------
[3, 2, 6, 1, 2]
[2, 6, 1, 2]
[6, 1, 2]
[1, 2]
[2]
[]
・map関数
map(関数,イテラブル)
イテラブルの要素を一つづつ抜き出し、関数を実行した値を返す。
▼こんなときに使う
・listの各要素をそれぞれn倍したい。
・lambda式と一緒に使われることが多い。
└ lambda式:関数(def)を一文で書いたもの
▼処理
for文と関数が組み合わさった処理。
▼注意点
出力値はmap型。
listが欲しい場合は、list()で変換する。
**・lambda式** defで定義する関数の簡略版。 メソッド名をつけず、引数と処理を一文で記述する。
lambda 引数:処理
**・mapとlambda** `map(lambda 変数:処理, イテラブル)`
イテラブルの要素を一つづつ抜き出し、lambdaの変数に入れ処理を実行。この処理を各要素に対し行う。
・enumerate関数
・for文で使う
・インデックス番号を抜き出す
for 変数1, 変数2 in enumerate(イテラブル):
└ 変数1:インデックス番号が入る。
└ 変数2:抜き出した要素が入る。
▼こんなときに使う
・forが何回目の処理か知りたい。
英語が見慣れないのと長いので、難しそうだが実際は単純。
通常のfor文:「for 変数2 in イテラブル」
①index番号を入れる変数を追加(先方に書く)
②イテラブルをenumerateで囲む。