1
def nest_elements(list1, start_index, stop_index):
    '''
    Create a nested list within list1. Elements in [start_index, stop_index]
    will be in the nested list.
Example:

    >>> x = [1,2,3,4,5,6]
    >>> y = nest_elements(x, 0, 4)
    >>> print(y)
    >>> [[1, 2, 3, 4, 5], 6]

Parameters:
----------
list1 : (list)
    A heterogeneous list.
start_index : (int)
    The index of the first element that should be put into a nested list
    (inclusive).
stop_index : (int)
    The index of the last element that should be put into a nested list
    (inclusive).

Returns:
----------
A copy of list1, with the elements from start_index to stop_index in a
sub_list.
'''
for i in range(len(list1)):
    if i>= start_index or i<= stop_index:
        list1.append(i)
    return list1
pass
Ch3steR
  • 20,090
  • 4
  • 28
  • 58
  • 1
    I don't understand how you expect this code to solve the problem. In particular: think carefully about what you `.append` to `list1`, and why; and think carefully about what should happen when `i` is outside the range for the `if` condition; and think carefully about how you know when you are done with the process. – Karl Knechtel Nov 29 '20 at 07:04
  • Your provided code does not seem to be complete. It seems to gather the elements that should be in the new sub_list but nothing more. Did you actually try this code. And please be more specific about what you need help with. – Jolbas Nov 29 '20 at 08:30
  • karl knechtel I'm new with python and I still learning so please be easy with me..thanks – marwah faraj Nov 29 '20 at 18:52
  • Jolbas I tried but it did not work and I'm still learning that is why I asked for help – marwah faraj Nov 29 '20 at 18:53

2 Answers2

2

You can use slice assignment* here.

from copy import deepcopy
def nested(vals, start, end):
    out = deepcopy(vals)
    out[start:end+1] = [out[start:end+1]]
    return out

x = [1,2,3,4,5,6]
out = nested(x, 0, 4)
out
# [[1, 2, 3, 4, 5], 6]

* I attached SO link, since I couldn't find Slice Assignment in python docs

Ch3steR
  • 20,090
  • 4
  • 28
  • 58
  • This answer currently does not make a copy of the list (though it would be easy to add in and is def a way cleaner solution than mine) – questionerofdy Nov 29 '20 at 06:51
  • 1
    @questionerofdy ahh true, *slice assignment* is in-place. But we can add `out = deepcopy(vals)` to avoid mutating `x`. Edited the answer. – Ch3steR Nov 29 '20 at 06:58
  • Maybe just `return [*vals[:start], vals[start:end+1], *vals[end+1:]]` – Jolbas Nov 29 '20 at 07:39
0
>>> def nest_elements(list1, start_index, stop_index):
...     list1[start_index:stop_index+1] = [list1[start_index:stop_index+1]]
...     return list1
... 
>>> print(nest_elements([1,2,3,4,5,6],0,4))
[[1, 2, 3, 4, 5], 6]
Sandeep Agrawal
  • 175
  • 1
  • 8