如何从python中的列表中随机打印元素

时间:2010-05-04 02:00:59

标签: python file random

到目前为止,我有这个,打印出我的列表中的每个单词,但我试图随机打印一个单词。有什么建议吗?

def main():
    # open a file
    wordsf = open('words.txt', 'r')
    word=random.choice('wordsf')
    words_count=0
    for line in wordsf:
        word= line.rstrip('\n')
        print(word)
        words_count+=1      

    # close the file
    wordsf.close()

3 个答案:

答案 0 :(得分:3)

尝试:

print random.choice([x.rstrip() for x in open("words.txt")])

请注意,在选择随机行之前,这会从每行中删除'\n';一个更好的解决方案留给读者练习。

答案 1 :(得分:1)

要在每行打印一个随机单词,您的循环可以是:

for line in wordsf:
    word = random.choice(line.split())
    print(word)

如果有的行只有空格,你还需要跳过这些:

for line in wordsf:
    if line.isspace(): continue
    word = random.choice(line.split())
    print(word)

您拥有的计数部分似乎是正确的,但与您的问题无关。

编辑:我认为你的Q意味着不同的东西(正如其他A也解释的那样):你想从文件中选择随机的,而不是随机的每一行的字。在这种情况下,其他A是正确的,但它们将O(N)辅助内存用于N行的文件。有一个很好的算法,因为Knuth从流中选择一个随机样本,而不事先知道它有多少项(不幸的是它需要生成N个随机数,所以如果你有足够的内存,它比较简单的一个慢。后者......但是考虑它仍然很有趣! - )......:

n = 0
word = None
for line in wordsf:
    n += 1
    if random.randrange(n) == 0:
        word = line
print(word.strip())

基本上,在每一行n,我们选择它以1.0/n的概率替换前一个(如果有的话) - 所以第一次概率为1(确定性),第二次概率为0.5,依此类推。我只是在结束时进行剥离,因为剥离后来被替换的临时选择会浪费精力;我通过生成一个包含0和n-1之间的均匀概率的随机数来避免划分和浮点麻烦(所以随机数为0的概率是1/n) - 小问题,但是从那以后他们不会使代码变得不那么清晰,我们也可以照顾它们; - )。

答案 2 :(得分:0)

import random
def main():
    wordsf = open('words.txt', 'r')
    words = [line.rstrip('\n') for line in wordsf]
    wordsf.close()

    random_number = random.randint(0, len(words)-1)
    random_word = words[random_number]
    print random_word

这很好用,但如果文件wordsf太大,那么我认为你会开始遇到内存问题,但我认为这对大多数情况都应该没问题

希望这有帮助。