CompSci 101 Test2 Sec1 Spring 2015 1. Note sets can be listed in any order Lists of keys or values from dictionaries can be listed in any order To print a list, use [ ]'s To print a set, use set( ) Output: ['b', 'e', 'e'] ['b', 'e', 'e', 'h'] ['a', 'b', 'c', 'j', 'k', 'p', 's'] set([1, 15]) set([1, 2, 3, 5, 8, 10, 11, 15]) set([3, 8, 11]) 32 ['H', 'C', 'U', 'D', 'F'] set([32, 25, 18, 12]) [10, 12, 25, 32] 2A. [14, 18] ['tennis', 'swimming'] ['ketball', 'eball'] 2B. firstlast = sorted([word[0] + word[-1] for word in shapes]) 2C. whereisa = [(word,word.find('a')) for word in shapes if 'a' in word] OR whereisa = [(word,word.find('a')) for word in shapes if word.find('a')>=0] 3A. def fileToList(datafile): newlist = [] for line in datafile: line = line.strip() templist = line.split(":") alist = templist[0].split() # split airline and flight number newlist.append([alist[0], alist[1], templist[1], int(templist[2])]) return newlist 3B. def largeFlights(datalist, size): answer = [] for info in datalist: if info[3]>= size: answer.append(info[0]+'-'+info[1]+'-'+ info[2]) return answer OR def largeFlights(datalist, size): answer = [] for info in datalist: if info[-1]>= size: answer.append('-'.join(info[0:3]) return answer OR def largeFlights(datalist, size): return ['-'.join(info[0:3]) for info in datalist if info[3] >= size] 4A. def listOfOpponents(datalist): answerset = set([]) for line in datalist: answerset.add(line[0]) return sorted(list(answerset)) OR return sorted(list(set( [line[0] for line in datalist] ))) 4B. def playersScoredLosingTeam(datalist): answerset= set([]) for line in datalist: if line[3] == 'lost' and int(line[2]) <= 8: answerset.add(line[1]) return list(answerset) OR def playersScoredLosingTeam(datalist): answerset= set([]) for line in datalist: if line[-1] == 'lost': if int(line[2]) <= 8: answerset.add(line[1]) return list(answerset) 4C. def teamsNotPlayed(datalist, league): setPlayed = set(listOfOpponents(datalist)) setLeague = set(league) return sorted(list(setLeague - setPlayed)) OR def teamsNotPlayed(datalist, league): answer = [ ] alist = listOfOpponents(datalist) for item in league: if item not in alist: answer.append(item) return answer 4D. def dictPlayerToGamesPlayedIn(datalist): d = {} for line in datalist: player = line[1] if player in d: d[player] += 1 else: d[player] = 1 return d OR # This solution uses a dictionary comprehension. Like a list comprehension, # you can build a dictionary with key-value pairs in one line. def dictPlayerToGamesPlayedIn(datalist): d = {item[1]:0 for item in datalist } # dictionary comprehension # initialize all keys to 0 for item in datalist: d[item[1]] += 1 return d 4E. def dictPlayersToOpponentsBeat(datalist): d = {} for line in datalist: player = line[1] team = line[0] if line[3] == 'won': if player in d: d[player].append(team) else: d[player] = [team] return d OR # This solution uses a dictionary comprehension to put all the keys in with # an empty list. def dictPlayersToOpponentsBeat(datalist): d = {line[1]:[] for line in datalist if line[3]=='won'} for line in datalist: if line[3] == 'won': d[line[1]].append(line[0]) return d 4F. def playerOnMostGamesWon(datalist): d = dictPlayersToOpponentsBeat(datalist) lenmax = max([len(d[key]) for key in d]) for key in d: if len(d[key]) == lenmax: return key OR def playerOnMostGamesWon(datalist): d = dictPlayersToOpponentsBeat(datalist) lenmax = 0 keymax = "" for (key,value) in d.iteritems(): if len(value) > lenmax: lenmax = len(value) maxkey = key return maxkey OR def playerOnMostGamesWon(datalist): d = dictPlayersToOpponentsBeat(datalist) maxkeyval = ("", 0) for (key,value) in d.iteritems(): if len(value) > maxkeyval[1]: maxkeyval = (key,len(value)) return maxkeyval[0]