NOTE: A student emailed me their code for the randomize function in generateNewGroups.py and this is my response back. Here is the code you sent me. def randomize(students): randomstuds = [] for stud in students: ind = random.randint(0, len(students)-1) randomstuds.append(stud[ind]) return randomstuds It is very close but the problem it has is that it may pick some students more than once and not pick some students. One typos is that stud[ind] should be students[ind] Here is a way to fix that. Once you pick a student, you need to delete them from the list students. You can use students.pop(ind) to remove the item at index ind from the list students. You need to adjust the random number you are picking to one less each time since the list students is changing. You actually already do this since you generate the random int based on the length of students. def randomize(students): randomstuds = [] for stud in students: ind = random.randint(0, len(students)-1) randomstuds.append(students[ind]) # remove student at ind position so not choosen again students.pop(ind) return randomstuds Other differences between this and my solution are the following. 1) my function doesn't return a value. Instead I pass it students and when the function is finished executing the list students has been modified. 2) I use less memory than you since you create a second list. As long as the list is small, that does not matter, but it starts to matter if the list was extremely large, such as a million names. Prof. Rodger