2014-03-04 3 views
2
import random 

words = ["Football" , "Happy" ,"Sad", "Love", "Human"] 

for word in words: 
    word = random.choice(words) 
    print(word) 
    words.remove(word) 

위의 코드는 왜 모두 5 대신 3 단어 만 출력합니까? words의 단어를 잘못된 순서로 임의의 순서로 인쇄하려고합니까?파이썬 목록이 제대로 작동하지 않습니다.

+3

['rando m.shuffle'] (http://stackoverflow.com/questions/473973/shuffle-an-array-with-python)를 참조하십시오. – Blorgbeard

답변

6

반복하는 동안 요소를 추가하거나 제거하면 목록을 수정할 수 없으며 동작은 정의되지 않습니다. 여기에 그 문제가없는 당신이하고있는 일을위한 가능한 대안이 있습니다 :

random.shuffle(words) 
for word in words: 
    print(word) 
3

이것은 올바르게 루핑되지 않았기 때문입니다. 이 시도 :

import random 

words = ["Football" , "Happy" ,"Sad", "Love", "Human"] 

while words: 
    word = random.choice(words) 
    print(word) 
    words.remove(word) 

당신은 당신이 그것을 반복하는 동안 배열을 수정할 수 없기 때문에 목록 words가 비어 있지 있는지 확인해야합니다. 이

for _ in range(len(words)): 
    word = random.choice(words) 
    words.remove(word) 
    print word 
0

당신은, 당신은 당신이 원하는 행동을받지 못하고있는 이유

>>>import random 
>>>random.shuffle(words) 
>>>print(*words) 
0

명시 적으로 blogbeards 제안을 상태로 시도 반복하면서

1

사람들은 대부분 설명 한 목록을 수정해서는 안 다른 관용구를 사용하여 믹스에 대체 솔루션을 던지는 것입니다 :

import random 
words = ["Football" , "Happy" ,"Sad", "Love", "Human"] 
random.shuffle(words) 
while words: 
    print(words.pop()) 
관련 문제