Index all *except* one item in python Index all *except* one item in python numpy numpy

Index all *except* one item in python


For a list, you could use a list comp. For example, to make b a copy of a without the 3rd element:

a = range(10)[::-1]                       # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]b = [x for i,x in enumerate(a) if i!=3]   # [9, 8, 7, 5, 4, 3, 2, 1, 0]

This is very general, and can be used with all iterables, including numpy arrays. If you replace [] with (), b will be an iterator instead of a list.

Or you could do this in-place with pop:

a = range(10)[::-1]     # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]a.pop(3)                # a = [9, 8, 7, 5, 4, 3, 2, 1, 0]

In numpy you could do this with a boolean indexing:

a = np.arange(9, -1, -1)     # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])b = a[np.arange(len(a))!=3]  # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])

which will, in general, be much faster than the list comprehension listed above.


The simplest way I found was:

mylist[:x] + mylist[x+1:]

that will produce your mylist without the element at index x.

Example

mylist = [0, 1, 2, 3, 4, 5]x = 3mylist[:x] + mylist[x+1:]

Result produced

mylist = [0, 1, 2, 4, 5]


>>> l = range(1,10)>>> l[1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[:2] [1, 2]>>> l[3:][4, 5, 6, 7, 8, 9]>>> l[:2] + l[3:][1, 2, 4, 5, 6, 7, 8, 9]>>> 

See also

Explain Python's slice notation