Hash 3. に見せかける
1.質問
2.私の回答
(服装の種類の個数1)-1(何も着ていない場合を除く)を乗じて答えを得る.
まずFirst for Moonで服の並びの中の服装の種類を数えます.
2番目のfor文により,アパレル組合せの個数を与えた.
def solution(clothes):
answer = {}
for i in clothes:
if i[1] in answer:
answer[i[1]] += 1
else:
answer[i[1]] = 1
cnt = 1
for i in answer.values():
print(i)
cnt *= (i + 1)
return cnt-1
3.その他の解釈
コンセプトは同じですが、コードはCollections、functoolsモジュールを使用してより簡単に記述されています.
Counterを使ったkindforname、kind in衣装
服の第二要素服の種類は返却されます.
それらを会計します.次にlambda関数を使用してcntの値を指定します.
1に値を乗算し、最後にreduce 1に復元します.
def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
4.新しい事実
Pythonではlambdaを使用して関数をより簡潔に記述できます.
def add(x,y)
return x+y
(lambda x,y: x + y)(10, 20)
map()、reduce()、filter()などを併用すると、複数の操作を実行できます.#map(함수,리스트)
print(*map(lambda x: x**2,range(5)))
#range(5)의 숫자들을 lambda 함수 x**2에 넣어 출력
#즉 0~4까지의 숫자들의 제곱을 출력
#0 1 4 9 16
#reduce(함수,시퀀스,초기값)
from functools import reduce
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
#[0,1,2,3,4]의 숫자들을 누적하여 lambda 함수에 적용한다 초기값을 설정하면 그것부터 시작.
#0+1=1 -> 1+2=3 -> 3+3=6 -> 6+4=10
#결과는 10
reduce(lambda x, y: y + x, 'abcde')
#b+a=ba -> c+ba=cba -> d+cba=dcba -> e+dcba=edcba
#결과는 edcba
#filter(함수,리스트)
list(filter(lambda x: x % 2, range(10)))
#0~9까지중 x%2 해서 참,즉 1보다 큰 수가 나오는,
#2로 나누었을때 나머지가 1인 홀수들을 출력하게 된다.
#map을 사용하면 리스트의 숫자들이 변한 값이 나오고
#filter를 사용하면 리스트의 숫자들이 그대로 나온다.
print(*filter(lambda x: x%2==0, range(10)))
#짝수를 출력하는 방법
5.ソース
に見せかける
Reference
この問題について(Hash 3. に見せかける), 我々は、より多くの情報をここで見つけました https://velog.io/@ili0820/Hash-3.-위장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol