In Python, you can prepend a value to an existing list
by using the list.insert()
method, for example, like so:
l = ['bar', 'baz'] l.insert(0, 'foo') print(l) # ['foo', 'bar', 'baz']
This would do in-place modification of the list
(as opposed to returning a new one) — which means that it would mutate/modify the original list
.
You can shorten this by using slice assignment (list[start:stop] = [value]
), for example, like so:
l = ['bar', 'baz'] l[0:0] = ['foo'] print(l) # ['foo', 'bar', 'baz']
This is the known as the extended indexing syntax — where specifying [0:0]
as both, the start and stop values to the slice operator, prepends the value (e.g. ['foo']
) to the list
. The 0
on the left side, however, can also be omitted in this case:
l = ['bar', 'baz'] l[:0] = ['foo'] print(l) # ['foo', 'bar', 'baz']
This is similar to using the slice function (slice(start, stop)
):
l = ['bar', 'baz'] l[slice(0, 0)] = ['foo'] print(l) # ['foo', 'bar', 'baz']
If prepending to a list
is costing you performance-wise, then perhaps you should consider using a deque
instead (as lists are not the most optimal for prepending values). In terms of time complexity, prepending to a list
is an O(n)
operation, as opposed to O(1)
with deque
.
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.