Determine if the list is empty or contains initial values. The initial values can be specific values, but they can also be the result of calling a function like range to generate a sequence of numbers and then converting that to a list.
If adding to the end, use the append method to add the new value to the end of the list. Note that you do not use an assignment statement, it is just a method call.
If adding a value elsewhere in the list, use the insert method to add the new value at the specified index. Note that you do not use an assignment statement, it is just a method call.
for var_name in collection_name - traverses collection_name from first element to last element storing a copy of each element from collection_name in var_name for each iteration of the loop.
for i in range(len(collection_name)) - traverses collection_name from first element to last element storing the index of each element in i for each iteration of the loop.
When calling a function, put variable name that represents the list as an argument in the method call. (Remember that when passing a list as an argument that changes made by the function to the list are persistent.)
Q1: The following function is intended to return a string formed by concatenating elements from the parameter words. The elements to be concatenated start with start_index and continue through the last element of words and should appear in reverse order in the resulting string.