簡體   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