python random.choices 질문 한 번 더 하려고 합니다.

조회수 721회

random.choices(리스트, 확률, 누적확률, 뽑을 개수) 로 사용하는 건 알고 있습니다. 현재 누적확률은 필요없는 상태구요.

원래 choices 함수의 목적은 리스트 안에 뽑힐 확률이 높은 값이 더 자주 뽑히도록 하는 거 잖아요? 근데 저는 제일 확률이 높은 값이 제일 덜 뽑히고 확률이 가장 낮은 값이 제일 잘 뽑히도록 하고 싶습니다. weights의 값을 반대로 넣어주면 되겠지만, 현재 weights의 값이 실행 시마다 랜덤으로 바뀌기 때문에 값을 미리 정해줄 수는 없는 상태입니다.

꼭 choices 함수가 아니더라도 목적만 시행되면 상관 없습니다.

방법이 없을까요 ㅜㅜ ?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 낮게 하고싶은 값에 명시적으로 -100 을 주던가하면 되지 않을까요? 낮고 높고 그건 어차피 사람이 정하기 나름이니 높은 값을 낮은 값으로 인위적으로 만들면 될 듯 한데요. 정영훈 2019.10.18 11:46
  • 랜덤으로 뽑힌 20개의 값이 0%부터 100%까지 값이 높을 수록 높은 확률을 나눠 가지게 됩니다. 하나당 확률은 거의 0.1(10%)를 넘지 않구요. 값이 랜덤으로 뽑힌 것이다보니 확률도 예측할 수 없기 때문에 어디다가 -100을 줄 지 가늠을 할 수 가 없습니다. 알 수 없는 사용자 2019.10.18 11:55
  • 50을 기준으로 낮은 값은 50 + x, 높은 값은 100 - x 를 하면 되지 않을까요? 예를 들면, 10 프로는 60프로가 되고, 90프로는 10프로가 되는 것이지요...즉 50을 기준으로 좌우 확률 값을 반대로 설정하는 겁니다...목적에 맞는 지는 모르겠네요... 알 수 없는 사용자 2019.10.18 11:55

1 답변

  • 실행시마다 weights 값이 "랜덤"으로 바뀌면 안 되죠.

    작은값의 weight 가 더 크도록 해야 하죠.

    랜덤으로 뽑힌값이 [ 1, 2, 3, 4, 5 ] 라고 합시다. (20개 뽑는다고 했는데, 그냥 5개만 뽑는다고 합시다.)

    1이 가장 큰 확률로 뽑히도록 하고 싶다는 거잖아요.

    [ w(1), w(2), w(3), w(4), w(5) ] 라는 weights 를 만드는데, w(1) 이 가장 크게 하면 되는 거고요.

    w 함수를 어떻게 정하느냐는 질문 주신분 마음이죠.

    def w(n) : return 1/n 이라고 하면, weights 는 [ 1/1, 1/2, 1/3, 1/4, 1/5 ] 가 되는 거구요.

    def w(n): return 1000 - 1 가 weights 가 되는 거구요. [ 999, 998, 997, 996, 995 ]

    OK?

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)