n = [3, 5, 7] def double(lst): x in lst: x *= 2 print x return lst print double(n) why doesn't return n = [6, 10, 14]?
there should better solution looks [x *=2 x in lst] doesn't work either.
any other tips for-loops , lists appreciated.
why doesn't return
n = [6, 10, 14]?
because n, or lst called inside double, never modified. x *= 2 equivalent x = x * 2 numbers x, , re-binds name x without changing object references.
to see this, modify double follows:
def double(lst): i, x in enumerate(lst): x *= 2 print("x = %s" % x) print("lst[%d] = %s" % (i, lst[i])) to change list of numbers in-place, have reassign elements:
def double(lst): in xrange(len(lst)): lst[i] *= 2 if don't want modify in-place, use comprehension:
def double(lst): return [x * 2 x in lst]
Comments
Post a Comment