Solution Discussion for lists code challenge

Nice one took me a while to finish…

i came up with :

#Write your function here
def double_index(lst,index):
  if index >= len(lst):
    return lst
  else:
    lst[index] = lst[index] * 2 
    return lst

print(double_index([3, 8, -10, 12], 2))

Fails with an index of -5 but i think that’s out of scope, the solution passes the test.

If i click the Solution, the provided solution seems to fail!?

1 Like

Seems to?

my solution:
def double_index(lst, index):
try:
lst[index] *= 2
return lst
except IndexError:
return lst

3 Likes

My solution:

def double_index(lst, index):
if -len(lst) <= index <= len(lst)-1:
lst[index] = 2*lst[index]
return lst
else:
return lst

This works too :slight_smile:

def double_index(lst, index):
try:
lst[index] *= 2
return lst
except IndexError:
return lst
print(double_index([3, 8, -10, 12], 2))

Could someone check my work? Wow, that was that a challenge! I spent over an hour working on it, lol. I got a green check, but I have no idea if I did it correctly or if I just got lucky. I basically played around with it and did some math to try and figure it out.

#Write your function here
def double_index(lst, index):
if len(lst) >= index + 1:
change_int = lst[index] *2
new_list = lst[0:index]
new_list.append(change_int)

index3 = index + 1
append_list = lst[index3:]

return new_list + append_list

else:
return lst

#Uncomment the line below when your function is done
print(double_index([3, 8, -10, 12], 2))

I did a little googling to try and find out how to do it. I didn’t cheat, I was just looking for different ways to append and combine lists. I saw a command insert(). Could that have been used as an alternative?

Alternative aside, what is the difference in how the two methods work?

>>> def add_to_list(array, item):
    n = len(array)
    m = array[n // 2]
    if item < m:
        array.insert(0, item)
    if item > m:
        array.append(item)

        
>>> s = [42]
>>> add_to_list(s,21)
>>> add_to_list(s,63)
>>> s
[21, 42, 63]
>>> add_to_list(s,42)
>>> add_to_list(s,43)
>>> s
[21, 42, 63, 43]
>>> add_to_list(s,41)
>>> s
[41, 21, 42, 63, 43]
>>> add_to_list(s,43)
>>> add_to_list(s,41)
>>> s
[41, 41, 21, 42, 63, 43, 43]
>>> 

See anything interesting going on here?

There is another difference that might be apparent in the above. list.insert() takes two mandatory arguments, not one. That means we can insert a new element anywhere in the list (including the end). By specifying zero in the first argument, we prepended the list.


The above raises an exception when given an empty list.

>>> def add_to_list(array, item):
    n = len(array)
    m = item if n < 1 else array[n // 2]
    if item < m:
        array.insert(0, item)
    if item > m or n < 1:
        array.append(item)

        
>>> s = []
>>> add_to_list(s, 42)
>>> s
[42]
>>> add_to_list(s, 42)
>>> s
[42]
>>> add_to_list(s, 41)
>>> add_to_list(s, 43)
>>> s
[41, 42, 43]
>>> 

Yours looks a lot better than mine. I like that // and I’ll have to remember that throughout the course. It looks like it gives an integer answer instead of a float. That would’ve been good to know so I could avoid trying to turn my numbers into integers. I’m gonna play around with insert() when I get the chance. That looks a lot easier to use too. Thanks for the help.

Is this a problem that should need an insert or append method?

  1. test if index is in range
  2. if in range then access the element at that index
  3. multiply it by 2
  4. assign the new value to the element at that index
1 Like

WARNING ** answer below incase you still trying:
The instructions for this section was not very clear. I tried several times to get this but had no luck over 2 days. I think they did not provide very good information to conduct this challenge. I asked for the solution after trying several times.

I’m going to share the answer they provide to talk about and also the instructions.

Here is instructions and hit:
Create a function named double_index that has two parameters named lst and index .

The function should double the value of the element at index of lst and return the new list with the doubled value.

If index is not a valid index, the function should return the original list.

After writing your function, un-comment the call to the function that we’ve provided for you to test your results.

Hint:
Use len(list) and index in an if statement to check to see if index is a valid index.

Correct answer provide by them:

#Write your function here
def double_index(lst, index):
  if index < len(lst):
  	lst[index] = lst[index] * 2
  return lst

#Uncomment the line below when your function is done
print(double_index([3, 8, -10, 12], 2))

What do you guys think?

def double_index(lst, index):
if index < len(lst):
lst[index] = lst[index]*2
return lst

so I tried this and it worked. Important note here is that (beginner terms) lst[index] = lst[index]*2 this would mean that the element of the list at index will be multiplied by 2.
as per example:

print(double_index([3, 8, -10, 12], 2)):

our index here is 2 (as defined in the function).
lst[index] = lst[2] (in python terms 3rd position on the list) = -10

we multiply the number at index (i.e. -10 as it is on 2nd position) by 2
so lst[index]*2 = -10 * 2 = -20

Without using anything not learned in python to date, the longer version to make this work would be as follows (I know it’s a bit clunky, just wanted to make it super readable):

def double_index(lst, index):

determine if it is before the last index

if index < len(lst) and index >= 0:
doubled = lst[index]
doubled = doubled * 2
new_list = lst[:index] + [doubled] + lst[(index+1):]
return new_list

to account for -1 as last index indicator

elif index == -1:
doubled = (lst[-1] * 2)
new_list = lst[:-1] + [doubled]
return new_list

if bad index is found

else:
return lst

I would just like to point out, that I created the successful result using, try and except(which was not counted as correct), as well as using if else(which also was not considered correct). I deleted it now, but in the solution given, entering negative numbers beyond -1 will return an error and doesn’t return the list, so it really doesn’t fully solve the problem. It kept telling me I need to double whatever was being pointed to in the index, but I was doing that and receiving the correct answers. Unfortunately I deleted my answer to see the solution, but might be something to look into.

It took me a while to get it, thanks

1 Like