Tkinter 随机抽样产生';样本大于总体,python 3.3

Tkinter 随机抽样产生';样本大于总体,python 3.3,tkinter,Tkinter,我正在写一段代码,应该从文本文件中读取10个单词的列表,然后随机选择9个。面临的问题是我的代码(如下)产生了一个错误,声明“样本大于总体”。有人能帮忙吗?谢谢 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

我正在写一段代码,应该从文本文件中读取10个单词的列表,然后随机选择9个。面临的问题是我的代码(如下)产生了一个错误,声明“样本大于总体”。有人能帮忙吗?谢谢

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)

错误在下面的第三行中说明

我发现了问题,但我不完全确定到底是什么原因造成的。您需要在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)
如果取消对行的注释,您将从print的输出中看到

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

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

打印这一行
[x.rstrip()for x in f]
,然后查看您是否只得到一个项目,我得到了一个“无效语法”错误。使用我的代码,程序显示了3个单词,但随后声明了有问题的错误@StevenSummersAh,它需要在print语句中使用括号。它以列表格式打印所有10个单词-方括号@StevenSummers。我只能相信它是你的文件。我测试了完全相同的代码,将f替换为10个字符串的列表,效果很好。打印的列表中有10个项目,不是吗?文本文件是这样设置的(从文件中复制的)NIGHT SMOKE GHOST TOOTH关于驼色搞笑椅价格,但是文件是垂直设置的,所以一行只有一个单词-而且,很抱歉,回复太晚,不得不退出@Stevensummers你所说的列表理解是什么意思?第二行我应该分配什么@StevenSummerst这是列表理解。通过赋值,我的意思是,将值存储为
word\u list
您也可以删除注释,它们只是为了显示错误是如何发生的。您给出的代码在打印时似乎完全清空了列表,好像代码清空了txt文件,好像里面什么都没有一样?我觉得这可能是问题所在,是否有可能替代random.sample?谢谢@StevenSummers