lists = [[1,4,6,7,8],[2,3,3,5,5],[4,4,4,6,9]] # a list of N lists indexes = [-1 for i in xrange(len(lists))] # for position keeping maxes = [lists[i][indexes[i]] for i in xrange(len(lists))] # initialize big\ gest values maxvalue = max(maxes) # find biggest M = 3 # how many biggest values you need result = [] for n in xrange(M): pos = maxes.index(maxvalue) # find position of biggest value result.append(maxvalue) # add biggest to result indexes[pos] = indexes[pos] - 1 # move to next in list that had biggest maxes[pos] = lists[pos][indexes[pos]] # update the added value maxvalue = max(maxes) # find new biggest print result