2013-05-10 4 views
4

안녕하세요! 프로그래밍에 익숙하지 않으므로 나랑 잘 어울립니다. 간단한 질문 난 희망!리스트에서 제거 할 임의의 샘플

내가 좋아하는 목록의 데이터를 가지고 : 내가 2의 크기는 그래서 난 싶었 무작위로 샘플링 할 필요가

L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)] 

사용 :

import random 
t1 = random.sample(set(L),2) 

이제 T1이 무작위로 뽑아 목록입니다 값,하지만 초기 목록에서 무작위로 추출한 것을 초기 목록에서 제거하려고했습니다. 선형 루프를 할 수 있지만 작업을 위해 더 큰 목록을 위해 이것을하려고합니다. 그래서 실행 시간이 영원히 걸릴 것입니다!

이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

답변

6
t1 = [L.pop(random.randrange(len(L))) for _ in xrange(2)] 

L의 나머지 요소의 순서는 변경되지 않습니다.

3

하나의 옵션은 목록을 shufle하고 첫 번째 두 요소를 팝하는 것입니다.

import random 
L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)] 
random.shuffle(L) 
t1 = L[0:2] 
+0

-1'random.shuffle'은 in-place 함수이므로'None'을 반환합니다. 이 답변은 :'TypeError : 'NoneType'객체에 '__getitem __'' – jamylak

+0

@jamylak 속성이 없습니다. 죄송합니다. 오류를 수정했습니다. 의견을 보내 주셔서 감사합니다 – jvallver

관련 문제