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