given function takes x
, manipulate x
such:
>>> x = [5,3,0,0] >>> j = 1 >>> i, xi in enumerate(x): ... if xi == 0: ... x[i] = 1.0/2**j ... j+=1 ... >>> x [5, 3, 0.5, 0.25]
and in function:
def f(x): j = 1 i, xi in enumerate(x): if xi == 0: x[i] = 1.0/2**j j+=1 return x
i want change lambda function how possible when uses variable not in loop?
without complication of j+=1
, considering j
constant this:
j = 1 f = lambda x: [1.0/2**j if xi == 0 else xi i, xi in enumerate(x)]
but need j change when if statement made. how can achieved in lambda function?
you make j
itertools.count()
object; each time call next()
on it'll yield next value in sequence:
from itertools import count j = count(1) f = lambda x: [1.0 / 2 ** next(j) if xi == 0 else xi i, xi in enumerate(x)]
this works because ever ask next value when x == 0
true.
however, need reset j
each time want use lambda
. incorporate list comprehension one-element tuple loop over:
f = lambda x: [1.0 / 2 ** next(j) if xi == 0 else xi j in (count(1),) i, xi in enumerate(x)]
all not readable. i'd stick def
function object instead.
as side note, use or
replace .. if xi == 0 else xi
expression; xi == 0
makes xi
falsey:
f = lambda x: [xi or 1.0 / 2 ** next(j) j in (count(1),) i, xi in enumerate(x)]
Comments
Post a Comment