2014-12-23 5 views
1

난 임의 제안 스크립트를 만들고 있습니다. 나는 내 생성 목록에 반복이 없는지 확인하는 방법에 대한 검색에서 random.sample을 발견했습니다. 기존 목록에 대해 결과를 테스트하기 위해 if 문을 사용하는 것과 같은 것입니까? 출력의 수는 사용자가 설정하며 출력은 무작위이지만 중복되지 않아야합니다.Python random.sample과 random.choice와 IF 문

import random 
def myRandom(): 
    myOutput = input("How many suggestions would you like?") 
    outList = list() 
    counter = 1 
    myDict = { 
    "The First":1988, 
    "The Second:": 1992, 
    "The Third": 1974, 
    "The Fourth": 1935, 
    "The Fifth":2012, 
    "The Six":2001, 
    "The Seventh": 1994, 
    "The Eighth":2004, 
    "The Ninth": 2010, 
    "The Tenth": 2003} 
    while counter <= myOutput: 
     thePick = random.choice(myDict.keys()) 
     if thePick in outList: 
      pass 
     else: 
      outList.append(thePick) 
      counter = counter + 1 
    print "These are your suggestions: {0}".format(outList) 
myRandom() 

내 출력 목록의 중복을받을 수없는 그래서이 무엇 random.sample가 아니라 어떻게해야입니다 : 여기 내 코드는?

+0

'목록'대신'set'을 사용하면됩니다. – dursk

+0

@mattm 아니, 작동하지 않습니다. 중복 값의 경우에도 세트에 삽입되지 않더라도 카운터가 증가합니다. (만약'list'가 있던'set' 이외의 다른 것을 바꾸는 것에 대해 이야기하고 있다면,이 코드에 어떤 영향도 미치지 않을 것입니다. (append 대신에'add'를 사용할 필요가 있습니다.) .. 그래서 나는'set'을'if ... else' 섹션을 "제거"하려고 시도하고 단지 항상'add'를 시도하고'set' 로직이 중복을 무시하도록 처리하도록 허용해야한다고 가정합니다 후드.) 당신은 또한 다운 스트림 코드가'list'를 요구할 수도 있다고 고려해야합니다. – ely

+0

의견 및 제안에 감사드립니다. 이것은 실제로 도움이됩니다. 저는 여전히 Python에 대해 전혀 새로운 지식을 가지고 있습니다. 그리고 나는 여러분이 여전히 작동하기 위해서는 꽤 clunky 원형 교차로에서 일을한다고 말할 수있을 것이라고 확신합니다. :-) – user3646005

답변

0

그래, random.sample()을 사용해야합니다. 그것은 당신의 코드를 깨끗하게 만들 것이고 당신은 성능 향상을 보너스로 얻을 것입니다. 루프 솔루션

성능 문제 :
이 A) 그것은) 숫자
B를 선택하기 전에 출력 목록에서 확인이 거부 샘플링을 수행하기 때문에 예상 시간이 입력 번호와 같은 높은 것의 길이에 접근 그 목록.

def myRandom(): 
    myOutput = input("How many suggestions would you like?") 
    myDict = { 
    "The First":1988, 
    "The Second:": 1992, 
    "The Third": 1974, 
    "The Fourth": 1935} 
    outList = random.sample(myDict, myOutput) 
    print "These are your suggestions: {0}".format(outList) 
2

예는, random.sample()에 대한 단일 호출은 트릭을 할 것입니다 :

outList = random.sample(myDict.keys(), myOutput) 

당신은 당신의 코드에서 다음 줄을 제거 할 수 있습니다

outList = list() 
counter = 1 

을뿐만 아니라 전체 while 루프로.