random.sample产生的样本大于人口,python 3.3

时间:2015-10-23 08:15:28

标签: tkinter

我正在编写一段代码,应该从文本文件中读取10个单词的列表,然后随机选择9.遇到的问题是我的代码(下面)产生错误,说明“样本大于人口”#39 ;。有人可以帮忙吗?感谢。

with open("9 words.txt") as f:
    for r in range(3):
        words = random.sample([x.rstrip() for x in f],3)
        grid = [words[i:i +3] for i in range(0,len(words),3)]
        for x,y,z in grid:
                Label(text=(x,y,z),font = font).grid(row=r)

错误在第3行中说明。

1 个答案:

答案 0 :(得分:0)

我发现了问题,但我并不完全确定究竟是什么导致了这个问题。您需要在for循环之外分配列表推导。

with open("9 words.txt") as f:
word_list = [x.rstrip() for x in f] # Assign here
for r in range(3):
    #word_list = [x.rstrip() for x in f] # Remove from main code only example
    #print(word_list)  # Remove from main code only example
    words = random.sample(word_list, 3)
    grid = [words[i:i +3] for i in range(0,len(words),3)]
    for x,y,z in grid:
            tk.Label(text=(x,y,z)).grid(row=r)

如果您取消注释,您将从打印输出中看到。

['NIGHT', 'SMOKE', 'GHOST', 'TOOTH', 'ABOUT', 'CAMEL', 'BROWN', 'FUNNY', 'CHAIR', 'PRICE']
[]
#Error

因此出于某种原因,它正在清空列表