繁体   English   中英

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

[英]how can i randomly print an element from a list in python

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

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()

尝试:

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

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

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

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 )-小问题,但由于它们没有不要让代码变得不太清楚,我们不妨加以照顾;-)。

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太大,那么我认为您将开始遇到内存问题,但是我认为这在大多数情况下都可以

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM