Конечно, простой способ не так эффективен, но разве действительно слишком медленный?
In [1]: import random
In [2]: timeit words = list(open("sowpods.txt"))
10 loops, best of 3: 48.4 ms per loop
In [3]: words = list(open("sowpods.txt"))
In [4]: len(words)
Out[4]: 267751
In [5]: timeit random.choice([w for w in words if len(w.strip())==6])
10 loops, best of 3: 62.5 ms per loop
In [6]: random.choice([w for w in words if len(w.strip())==6])
Out[6]: 'NAPKIN\r\n'
Версия с одним вкладышем на этом компьютере занимает менее 10-й секунды
In [7]: timeit random.choice([w for w in open("sowpods.txt") if len(w.strip())==6])
10 loops, best of 3: 91.2 ms per loop
In [8]: random.choice([w for w in open("sowpods.txt") if len(w.strip())==6])
Out[8]: 'REVEUR\r\n'
Вы можете добавить .strip()
к этому, чтобы избавиться от '\r\n'
на конце