Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Repeat list to max number of elements [duplicate]

Tags:

python

What is the most efficient method to repeat a list up to a max element length?

To take this:

lst = ['one', 'two', 'three']
max_length = 7

And produce this:

final_list = ['one', 'two', 'three', 'one', 'two', 'three', 'one']
like image 713
Pylander Avatar asked Oct 04 '16 23:10

Pylander


People also ask

How do you count the number of repeated elements in a list?

Method 2: Count occurrences of an element in a list Using count() The idea is to use the list method count() to count the number of occurrences.

Can a list have duplicate elements?

Removing Duplicates from a List. Python list can contain duplicate elements.


2 Answers

I'd probably use iterools.cycle and itertools.islice:

>>> from itertools import cycle, islice
>>> lst = [1, 2, 3]
>>> list(islice(cycle(lst), 7))
[1, 2, 3, 1, 2, 3, 1]
like image 133
mgilson Avatar answered Nov 09 '22 04:11

mgilson


Multiply appropriately?

>>> lst = ['one', 'two', 'three']
>>> max_length = 7
>>> 
>>> q, r = divmod(max_length, len(lst))
>>> q * lst + lst[:r]
['one', 'two', 'three', 'one', 'two', 'three', 'one']

Benchmarked mine and mgilson's solution, mine looks more efficient, for example for the below test mine takes about 0.7 seconds while mgilson's takes about 2.8 seconds.

from timeit import timeit
data = "lst = ['one', 'two', 'three'] * 1000; max_length = 12345678"

print(timeit('q, r = divmod(max_length, len(lst)); q * lst + lst[:r]',
             data,
             number=10))

print(timeit('list(islice(cycle(lst), max_length))',
             data + '; from itertools import cycle, islice',
             number=10))
like image 33
Stefan Pochmann Avatar answered Nov 09 '22 05:11

Stefan Pochmann