creating a new list with subset of list using index in python creating a new list with subset of list using index in python python python

creating a new list with subset of list using index in python


Suppose

a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8]

and the list of indexes is stored in

b= [0, 1, 2, 4, 6, 7, 8]

then a simple one-line solution will be

c = [a[i] for i in b]


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)))