Как я могу случайно напечатать элемент из списка в Python - PullRequest
0 голосов
/ 04 мая 2010

Пока у меня есть это, которое печатает каждое слово в моем списке, но я пытаюсь напечатать только одно слово наугад. Есть предложения?

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 ]

3 голосов
/ 04 мая 2010

Попробуйте:

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

Обратите внимание, что перед выбором случайной строки она удаляет '\n' из каждой строки; лучшее решение оставлено в качестве упражнения для читателя.

1 голос
/ 04 мая 2010

Чтобы напечатать одно случайное слово в строке, ваш цикл может быть:

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, также интерпретированные): вы хотите выбрать случайную строку из файла, а не случайное слово из каждая строка. В этом случае остальные А верны, но они занимают O(N) вспомогательную память для файла N строк. Есть хороший алгоритм, благодаря тому, что Кнут выбирает случайную выборку из потока, не зная заранее, сколько у него элементов (к сожалению, для этого нужно генерировать 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) - незначительные проблемы, но так как они не не делайте код менее понятным, мы могли бы позаботиться о них; -).

0 голосов
/ 04 мая 2010
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 слишком велик, то я думаю, что вы начнете сталкиваться с проблемами с памятью, но я думаю, что в большинстве случаев это подойдет

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...