Python | How to append elements to a list randomly

python

Solution

If you need to perform single insert in a random position then the already given trivial example works:

from random import randrange

def random_insert(lst, item):
    lst.insert(randrange(len(lst)+1), item)

However if you need to insert k items to a list of length n then using the previously given function is O(n*k + k**2) complexity. However inserting multiple items can be done in linear time O(n+k) if you calculate the target positions ahead of time and rewrite the input list in one go:

from random import sample
def random_insert_seq(lst, seq):
    insert_locations = sample(xrange(len(lst) + len(seq)), len(seq))
    inserts = dict(zip(insert_locations, seq))
    input = iter(lst)
    lst[:] = [inserts[pos] if pos in inserts else next(input)
        for pos in xrange(len(lst) + len(seq))]

Problem

Is there a way to append elements to a list randomly, built in function ex: ``` def random_append(): lst = ['a'] lst.append('b') lst.append('c') lst.append('d') lst.append('e') return print lst ``` this will out put `['a', 'b', 'c', 'd', 'e']` But I want it to add elements randomly and out put something like this: `['b', 'd', 'b', 'e', 'c']` And yes there's a function random.shuffle() but it shuffles a list at once which I don't require, I just want to perform random inserts only.

Original source