Rather simple question. Say I have a list like:
a = [3, 4, 54, 8, 96, 2]
Can I use slicing to leave out an element around the middle of the list to produce something like this?
a[some_slicing]
[3, 4, 8, 96, 2]
were the element 54
was left out. I would've guessed this would do the trick:
a[:2:]
but the result is not what I expected:
[3, 4]
You cannot emulate pop with a single slice, since a slice only gives you a single start and end index.
You can, however, use two slices:
>>> a = [3, 4, 54, 8, 96, 2]
>>> a[:2] + a[3:]
[3, 4, 8, 96, 2]
You could wrap this into a function:
>>> def cutout(seq, idx):
"""
Remove element at `idx` from `seq`.
TODO: error checks.
"""
return seq[:idx] + seq[idx + 1:]
>>> cutout([3, 4, 54, 8, 96, 2], 2)
[3, 4, 8, 96, 2]
However, pop
will be faster. The list pop function is defined in listobject.c.
To remove an item in-place call:
your_list.pop(index)
It will return the removed item and change your_list
.
Slice the two parts separately and add those lists
a[:2] + a[3:]
To work on any size list:
a.pop((len(a)-1)//2)