creating a new list with subset of list using index in python
Try new_list = a[0:2] + [a[4]] + a[6:]
.
Or more generally, something like this:
from itertools import chainnew_list = list(chain(a[0:2], [a[4]], a[6:]))
This works with other sequences as well, and is likely to be faster.
Or you could do this:
def chain_elements_or_slices(*elements_or_slices): new_list = [] for i in elements_or_slices: if isinstance(i, list): new_list.extend(i) else: new_list.append(i) return new_listnew_list = chain_elements_or_slices(a[0:2], a[4], a[6:])
But beware, this would lead to problems if some of the elements in your list were themselves lists.To solve this, either use one of the previous solutions, or replace a[4]
with a[4:5]
(or more generally a[n]
with a[n:n+1]
).
The following definition might be more efficient than the first solution proposed
def new_list_from_intervals(original_list, *intervals): n = sum(j - i for i, j in intervals) new_list = [None] * n index = 0 for i, j in intervals : for k in range(i, j) : new_list[index] = original_list[k] index += 1 return new_list
then you can use it like below
new_list = new_list_from_intervals(original_list, (0,2), (4,5), (6, len(original_list)))