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
Post a Comment