Python list comparison issues -


i need write program in python compares 2 parallel lists grade multiple choice exam. 1 list has exam solution , second list has student's answers. question number each missed question stored in third list using natural index numbers. solution must use indexing.

i keep getting empty list returned third list. appreciated!

def main():     exam_solution =   ['b', 'd', 'a', 'a', 'c', 'a', 'b', 'a', 'c', 'd', 'b', 'c',\                'd', 'a', 'd', 'c', 'c', 'b', 'd', 'a']     student_answers = ['b', 'd', 'b', 'a', 'c', 'a', 'a', 'a', 'c', 'd', 'b', 'c',\                'd', 'b', 'd', 'c', 'c', 'b', 'd', 'a']      questions_missed = []        item in exam_solution:         if item not in student_answers:             questions_missed.append(item) 

questions_missed = [i i, (ex,st) in enumerate(zip(exam_solution, student_answers)) if ex != st] 

or alternatively, if prefer loops on list comprehensions:

questions_missed = [] i, (ex,st) in enumerate(zip(exam_solution, student_answers)):     if ex != st:         questions_missed.append(i) 

both give [2,6,13]

explanation:

enumerate utility function returns iterable object yields tuples of indices , values, can used to, loosely speaking, "have current index available during iteration".

zip creates list of tuples, containing corresponding elements 2 or more iterable objects (in case lists).

i'd prefer list comprehension version.

if add timing code, see performance doesn't differ here:

def list_comprehension_version():     questions_missed = [i i, (ex,st) in enumerate(zip(exam_solution, student_answers)) if ex != st]     return questions_missed  def loop_version():     questions_missed = []      i, (ex,st) in enumerate(zip(exam_solution, student_answers)):         if ex != st:             questions_missed.append(i)      return questions_missed  import timeit  print "list comprehension:", timeit.timeit("list_comprehension_version", "from __main__ import exam_solution, student_answers, list_comprehension_version", number=10000000) print "loop:", timeit.timeit("loop_version", "from __main__ import exam_solution, student_answers, loop_version", number=10000000) 

gives:

list comprehension: 0.895029446804 loop: 0.877159359719 

Comments

Popular posts from this blog

javascript - jquery or ashx not working -

opencv - DataType<cv::detail::deriv_type>::depth what is it used for -

python 3.x - Mapping specific letters onto a list of words -