[PIPython] estrarre una stringa random da un file

Federico Nati federico.nati
Dom 27 Feb 2005 21:24:10 CET


ciao,

esiste un modo per ottimizzare la scrittura di uno dei seguenti tre algoritmi
che piu' o meno fanno la stessa cosa, ovvero estrarre una stringa a caso in un
file? Voglio leggere il file stringa a stringa, senza caricarlo in memoria,
una volta sola.

il modo piu' esplicito e':
--
#!/usr/bin/python

from sys import stdin
from random import random

s = stdin.readlines()
selected = s[0]
counter  = 1

for x in s:
    counter += 1
    prob = 1./counter
    if random() < prob:
        selected = x

print selected
--

alrimenti mi pare piu' efficiente:
--
#!/usr/bin/python

from sys import stdin
from random import random

s = stdin.readlines()

print [x[1] for x in enumerate(s) if random() < 1./(x[0] + 1)][-1]
--

oppure ancora (ma piu' lento mi pare) sostituire con:

--
print reduce(lambda i, j: (i, j)[int(random() < 1./j[0])], enumerate(s))
--

Si puo' ottimizzare?

Ciao, Federico.


More information about the Python mailing list