How to slice middle element from list

35.1k views Asked by At

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]
6

There are 6 answers

1
miku On BEST ANSWER

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.

0
Vikas Ojha On

Slice the two parts separately and add those lists

a[:2] + a[3:]
3
Klaus D. On

To remove an item in-place call:

your_list.pop(index)

It will return the removed item and change your_list.

1
Alecg_O On

To work on any size list:

a.pop((len(a)-1)//2)
1
Jalil Alavinia On

It is the easiest answer:

>>>a = [3, 4, 54, 8, 96, 2]

>>>a.remove(54)

[3, 4, 8, 96, 2]

0
bigBlind On

I would go with a list comprehension:

>>> a = [3, 4, 54, 8, 96, 2]
>>> a_ = [list(j for idx, j in enumerate(a) if idx != 2)]
>>> [3, 4, 8, 96, 2]