# creating a new list with subset of list using index in 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 chain
new_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_list
new_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]`

).

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

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