[Tutor] list.append(x) but at a specific 'i'
Steven D'Aprano
steve at pearwood.info
Wed Sep 22 21:47:45 CEST 2010
On Wed, 22 Sep 2010 08:30:09 am Norman Khine wrote:
> hello, how do i extend a python list but from a given [i],
Do you mean to modify the list in place, like append() and extend() do,
or do you mean to create a new list, like + does?
> for example:
> >>> a = ['a', 'b', 'e']
> >>> b = ['c', 'd']
> >>>
> >>> a + b
>
> ['a', 'b', 'e', 'c', 'd']
>
>
> but i want to put the items of 'b' at [-2] for example.
When you ask a question, it usually helps to show the output you *want*,
not the output you *don't want*, rather than to make assumptions about
what other people will understand.
When you say that you want the items of b *at* -2, taken literally that
could mean:
>>> a = ['a', 'b', 'e']
>>> b = ['c', 'd']
>>> a.insert(-2+1, b)
>>> print(a)
['a', 'b', ['c', 'd'], 'e']
Note that the items of b are kept as a single item, at the position you
ask for, and the index you pass to insert() is one beyond when you want
them to appear.
To create a new list, instead of insert() use slicing:
>>> a[:-2+1] + [b] + a[-2+1:]
['a', 'b', ['c', 'd'], 'e']
If you want the items of b to *start* at -2, since there are exactly two
items, extend() will do the job for in-place modification, otherwise +.
But you already know that, because that was your example.
If you want the items of b to *end* at -2, so that you get
['a', 'b', 'c', 'd', 'e'] then you could use repeated insertions:
for c in b:
a.insert(-2, c)
but that will likely be slow for large lists. Better to use slicing. To
create a new list is just like the above, except you don't create a
temporary list-of-b first:
>>> a[:-2+1] + b + a[-2+1:]
['a', 'b', 'c', 'd', 'e']
To do it in place, assign to a slice:
>>> a[-2:-2] = b
>>> print(a)
['a', 'c', 'd', 'b', 'e']
--
Steven D'Aprano
More information about the Tutor
mailing list