2013-02-09 2 views
1

내가 파이썬에서 일하고 있어요, 기본적으로 내가 정수의 목록이 있습니다 변수 total어떤 정수가 생성 될 때까지 k가없는 무작위 샘플을 만드는 방법? (파이썬)

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10] 

을, 나는 (이 목록에서 난수를 생성하는 방법을 알아 내려고 노력하고있어 교체하지 않고) 10이 나오면 멈 춥니 다. while 루프에서 random.shuffle을 사용할 것이라고 생각하지만 잘 모르겠습니다. 조언이나 조언이 있으십니까?

+0

죄송합니다.이 시나리오에서 '총계'의 역할은 무엇입니까? '10 '을 만드는 데 얼마나 많은 루프가 필요한지 알고 싶습니까? –

+0

예, 합계는 1, 2, 3 ... 10의 다양한 숫자를 갖는 정수 세트입니다. 10을 얻을 때까지이 정수 세트에서 임의로 숫자를 가져 와서 멈 춥니 다. – hayleyelisa

+0

표준 라이브러리''random.choice'' * 비어 있지 않은 시퀀스에서 무작위 요소를 선택하십시오. * – sotapme

답변

1

random.shuffle을 사용하면 루프가 필요하지 않습니다.

random.shuffle(l) 
random_selection = l[ :l.index(10) ] 
+0

고마워요! 나는 이것이 내가 찾고있는 것이라고 생각한다. 그러나 그것은 10을 포함하여 10을 제외한 모든 것을 생산하는 것처럼 보입니다. 10을 포함 시키려면 어쨌든 거기에 있습니까? – hayleyelisa

+0

@ user2057725 :'l.index (10) +1 '? –

+0

하하 와우, 그건 바보 같은 질문 이었어. 고맙습니다!! – hayleyelisa

2

total의 임의의 요소를 pop() 한 다음 10인지 확인하십시오. 예를 들어

while total.pop(random.randrange(len(total))) != 10: 
    ... # do your stuff until the 10 is chosen 

total.pop (i)는 인덱스에서 totali의 요소를 제거하고, 따라서 이것은 여분없이 작동한다. 또한 check out this answer.

편집 :
어쩌면 당신이 여러 번에 동일한 요소를함으로써 달성하려는 것은 가중 무작위 선택이다; 그것은 오히려 못생긴 해결책이 될 것입니다. 그렇다면이 질문 (Weighted random selection with and without replacement)이 도움이되는지 확인하십시오. 건배.