Learn Algorithm Design by Building a Shortest Path Algorithm - Step 47

Hey guys. I’m trying to apply the slice syntax as required, but I can’t figure out the issue. I’ve tried many options but with no avail. Can you please help me?

Your code so far

my_graph = {
    'A': [('B', 3), ('D', 1)],
    'B': [('A', 3), ('C', 4)],
    'C': [('B', 4), ('D', 7)],
    'D': [('A', 1), ('C', 7)]
}

def shortest_path(graph, start):
    unvisited = list(graph)
    distances = {node: 0 if node == start else float('inf') for node in graph}
    paths = {node: [] for node in graph}
    paths[start].append(start)
    
    while unvisited:
        current = min(unvisited, key=distances.get)
        for node, distance in graph[current]:
            if distance + distances[current] < distances[node]:
                distances[node] = distance + distances[current]

/* User Editable Region */

                if paths[node] and paths[node][-1] == node:
                    paths[node][current] = paths[current]

/* User Editable Region */

                else:
                    paths[node].extend(paths[current])
                paths[node].append(node)
        unvisited.remove(current)
    
    print(f'Unvisited: {unvisited}\nDistances: {distances}\nPaths: {paths}')
    
shortest_path(my_graph, 'A')

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0

Challenge Information:

Learn Algorithm Design by Building a Shortest Path Algorithm - Step 47

What have you tried exactly?

Well, I’ve tried to assign ‘node’ and ‘paths[node]’ as paths[current], also as path[:current] and vice-versa and other options. How to I get a copy of a list item using slice syntax as suggested?

The slice syntax is the following: a_list[start:end]. Where start and end are the indexes indicating the part of the list to slice.
If you want to copy the entire list you can simply omit the starting and ending indexes.
Remember that you want to copy paths[current].

2 Likes

It worked, thank you for your help!

I’m glad it was helpful :slightly_smiling_face:

this step is so odd. I had to resort to help of way more experienced coders to solve this. the solution posted here doesn’t help at all - why was list slicing necessary in the first place? why was .copy() not an acceptable answer?

I would suggest opening a new thread to ask this question.

My quick take: There are a few different ways to accomplish any task. This lesson is teaching different methods in the context of building a project. I’m not familiar with this project, maybe it was building on a previous lesson?

Now, you know two different methods to copy a list.

You can read a bit more about different methods to copy a list here if you are interested: https://therenegadecoder.com/code/how-to-clone-a-list-in-python/#copy-a-list-using-a-slice

It still doesn’t work for me… maybe any extra tips can be added?

I have tried…

            if paths[node] and paths[node][-1] == node:
                paths[node] = paths[node:current]

also paths[node] = paths[:current]

and all sorts of similar combinations, but I don’t seem to get it…

EDIT: oooooooohhhhhhhhhhhhh I seeeeeeeeeeeeeeee… got it!

1 Like

Hi brunoahlc,

what did exactly work for you? I am really lost here XD

EDIT: oooooooohhhhhhhhhhhhh I seeeeeeeeeeeeeeee… got it!

1 Like

Next time, please open a new topic for your question, thanks! Glad you figured it out though, nice work