Exercise 1: Dedupe a List, Preserving Order — Possible Solution ==================================================================== words_list = ["who", "why", "when", "who", "when", "what", "where", "whom", "who", "when", "who"] new_list = [] index = 0 while index < len(words_list): new_index = 0 found = False while new_index < len(new_list): if words_list[index] == new_list[new_index]: found = True break new_index += 1 if not found: new_list.append(words_list[index]) index += 1 print(new_list) Output: ['who', 'why', 'when', 'what', 'where', 'whom'] WHY THIS WORKS AS AN ANSWER ------------------------------ The structure is identical to the lesson's tuple case study — an outer while walking words_list by index, an inner while searching new_list for a match, and a found flag deciding whether to add the current word. The only real difference is the last line of the "add it" branch: new_list.append(words_list[index]) instead of tuple concatenation, because lists are mutable and have a real .append() method. Both the outer index and the inner new_index are incremented unconditionally every time their own loop runs, which is exactly what keeps both loops from spinning forever.