# HG changeset patch # User Damien Correia # Date 1530628613 -7200 # Node ID 59452a6f51a894af411dbddaab74503689960f59 # Parent f139914e2eeec1453ce20d27c17e26a6fcfbd61e# Parent 7d552669f29f30251b3fab0ec95099167dc96dc5 merge default diff -r f139914e2eee -r 59452a6f51a8 src/pyams_utils/list.py --- a/src/pyams_utils/list.py Mon Jul 02 17:41:09 2018 +0200 +++ b/src/pyams_utils/list.py Tue Jul 03 16:36:53 2018 +0200 @@ -15,6 +15,7 @@ # import standard library from itertools import filterfalse +from random import random, shuffle # import interfaces @@ -102,3 +103,23 @@ if k not in seen: seen_add(k) yield element + + +def random_iter(iterable, limit=1): + """Get items randomly from an iterator + + >>> from pyams_utils.list import random_iter + >>> mylist = [1, 2, 3, 2, 1] + >>> list(random_iter(mylist, 2)) + [..., ...] + """ + selected = [None] * limit + for index, item in enumerate(iterable): + if index < limit: + selected[index] = item + else: + selected_index = int(random() * (index+1)) + if selected_index < limit: + selected[selected_index] = item + shuffle(selected) + return iter(selected)