Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

mewwts/pyudorandom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pyudorandom

build Status Coverage Status

The pyudorandom module lets you iterate over a list in a non-succsessive, yet deterministic way. It comes in handy when you want to mix up the items, but don't need any guarantees of randomness. Also, it makes sure that it only gives you the elements once.

If you have a iterable of length n, pyudorandom will first find a random number m between 0 and n-1 such that the gcd(m, n) == 1. That number will then be used to generate 0 through n-1 by using integers modulo n.

As such, it might be slow on small data, but shall be significantly faster than random.shuffle for longer lists.

API

Given a list ls = [1, 5, 7, 3, ..., 321, 994] and the imported module import pyudorandom. ##pyudorandom.items(ls) Draw 'random' items from ls.

>>> for i in pyudorandom.items(ls):
...     print(i)
...
7
321
...
...
5

pyudorandom.shuffle(ls)

Get a new list with the elements of ls in a new order.

>>> new_order = pyudorandom.shuffle(ls)
>>> new_order == ls
False
>>> set(new_order) == set(ls)
True

pyudorandom.indices(ls)

Get the indices of the list in a 'random' order.

Performance

See source in perf.py.

methods n=10 n=100 n=1000 n=10000 n=100000 n=1000000 n=10000000
random.shuffle 9.4878e-05 0.000697057 0.0079944 0.0994185 1.15775 13.1515 158.261
pyudorandom.shuffle 9.2293e-05 0.000397103 0.00311404 0.0421352 0.577736 6.40441 88.2447
pyudorandom.items 7.2781e-05 0.000374695 0.00349281 0.0377044 0.551456 6.10636 84.6845

Pyudorandom can be twice as fast as random.

About

Mix up items without guarantees.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages