NCAA Pool - Generate random teams for a list of players
Randomly shuffling a list seven times is not any better than doing it once. So random.shuffle(playerlist) is enough.

In Python you almost never want to iterate over the indices of a list, rather iterate over the list itself. Here you could do:

import random
import itertools

regions = "East", "West", "Midwest", "South"
players = ["Player {}".format(i) for i in range(64)]
teams = range(1, len(players) / len(regions) + 1)
random.shuffle(players)

teamlist = ["{}: {} {}".format(player, *team) for player, team in 
            zip(players, itertools.product(regions, teams))]

print(teamlist)


Here I used str.format to make formatting the different strings easier and itertools.product to construct a list (actually an iterable) of region, team:

&gt;&gt;&gt; list(itertools.product(regions, teams))
[('East', 1), ('East', 2), ('East', 3), ('East', 4), ('East', 5), ('East', 6), ('East', 7), ('East', 8), ('East', 9), ('East', 10), ('East', 11), ('East', 12), ('East', 13), ('East', 14), ('East', 15), ('East', 16), ('West', 1), ('West', 2), ('West', 3), ('West', 4), ('West', 5), ('West', 6), ('West', 7), ('West', 8), ('West', 9), ('West', 10), ('West', 11), ('West', 12), ('West', 13), ('West', 14), ('West', 15), ('West', 16), ('Midwest', 1), ('Midwest', 2), ('Midwest', 3), ('Midwest', 4), ('Midwest', 5), ('Midwest', 6), ('Midwest', 7), ('Midwest', 8), ('Midwest', 9), ('Midwest', 10), ('Midwest', 11), ('Midwest', 12), ('Midwest', 13), ('Midwest', 14), ('Midwest', 15), ('Midwest', 16), ('South', 1), ('South', 2), ('South', 3), ('South', 4), ('South', 5), ('South', 6), ('South', 7), ('South', 8), ('South', 9), ('South', 10), ('South', 11), ('South', 12), ('South', 13), ('South', 14), ('South', 15), ('South', 16)]


Note that 0 is the default start argument for a range.

If your script becomes longer, you should probably add a if __name__ == "__main__": guard to allow importing your code from other scripts.