[英]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.