복붙노트

[PYTHON] 파이썬의 무작위 반복

PYTHON

파이썬의 무작위 반복

숫자 목록을 순차적으로 반복하려면 다음과 같이 작성하십시오.

for i in range(1000):
  # do something with i

그러나 범위 (0..999)의 숫자 목록을 무작위로 반복하고 싶다면 어떻게해야할까요? 모든 반복에서 임의의 이전 반복에서 선택되지 않은 숫자를 임의로 선택해야하며 범위 (0..999)의 모든 숫자를 반복 할 필요가 있습니다.

그렇게하는 법을 아십니까?

해결법

  1. ==============================

    1.random.shuffle ()을 사용하여 목록을 임의로 섞을 수 있습니다.

    random.shuffle ()을 사용하여 목록을 임의로 섞을 수 있습니다.

    import random
    
    r = list(range(1000))
    random.shuffle(r)
    for i in r:
      # do something with i
    

    그런데 다른 프로그래밍 언어의 정수 범위에서 for 루프를 사용하는 많은 경우 Python에서 반복 할 "대상"을 직접 설명 할 수 있습니다. 예를 들어, i의 값을 사용하여 목록 요소에 액세스하려면 목록을 직접 더 잘 섞어 야합니다.

    lst = [1970, 1991, 2012]
    random.shuffle(lst)
    for x in lst:
      print x
    

    참고 : random.shuffle ()을 사용할 때는 다음 경고를 유의해야합니다 (docs에서 가져옴 :

  2. ==============================

    2.사람들은 종종 모듈화 기회를 놓칩니다. "반복 무작위"아이디어를 캡슐화하는 함수를 정의 할 수 있습니다.

    사람들은 종종 모듈화 기회를 놓칩니다. "반복 무작위"아이디어를 캡슐화하는 함수를 정의 할 수 있습니다.

    def randomly(seq):
        shuffled = list(seq)
        random.shuffle(shuffled)
        return iter(shuffled)
    

    그때:

    for i in randomly(range(1000)):
        #.. we're good to go ..
    
  3. ==============================

    3.파이썬 생성기와 Fisher-Yates 셔플을 시연합니다.

    파이썬 생성기와 Fisher-Yates 셔플을 시연합니다.

    import random
    
    def shuffled(sequence):
        deck = list(sequence)
        while len(deck):
            i = random.randint(0, len(deck) - 1) # choose random card
            card = deck[i]                       # take the card
            deck[i] = deck[-1]                   # put top card in its place
            deck.pop()                           # remove top card
            yield card
    

    당신은 당신이 사용하는만큼 난수를 생성합니다. 하지만 솔직히 말해서 아마 많은 양을 절약 할 수 없을 것이므로 일반적으로 random.shuffle을 사용해야합니다.

    참고 : 상단 카드를 선택하면 deck [i] = deck.pop ()이 안전하지 않으므로 상단 제거는 두 단계로 수행됩니다.

  4. ==============================

    4.numpy에는 random.permutation ()이라는 함수가 있습니다. 코드가 다음과 같이 보일 것입니다.

    numpy에는 random.permutation ()이라는 함수가 있습니다. 코드가 다음과 같이 보일 것입니다.

    from numpy.random import permutation
    
    for i in permutation(1000):
        # do something with i
    
  5. ==============================

    5.random.shuffle 메서드를 사용합니다.

    random.shuffle 메서드를 사용합니다.

    itrange = list(range(100))
    random.shuffle(itrange)
    for i in itrange:
        print i
    
  6. from https://stackoverflow.com/questions/9252373/random-iteration-in-python by cc-by-sa and MIT license