python - Creating a new list using for loop? -
i need write function normalizes vector (finds unit vector). vector can normalized dividing each individual component of vector magnitude.
the input function vector i.e. 1 dimensional list containing 3 integers.
the code follows:
def my_norml(my_list): tot_sum = 0 item in my_list: tot_sum = tot_sum + item**2 magng = tot_sum**(1/2) norml1 = my_list[0]/magng #here want use loop norml2 = my_list[1]/magng norml3 = my_list[2]/magng return [norml1, norml2,norml3]
there's couple of things here.
initially, let me point out tot_sum = tot_sum + item**2
can written more concisely tot_sum += item**2
. answer question, use loop achieve want with:
ret_list = [] in my_list: ret_list.append(i / magng) return ret_list
but isn't best approach. it way better utilize comprehensions achieve need; also, sum
built-in function can summing instead of needing manually perform for-loop
:
magng
can computed in 1 line passing comprehension sum
. comprehension raise each item
** 2
, divide summation sum
returns:
magng = sum(item**2 item in my_list) ** (1/2)
after this, can create new list again utilizing comprehension:
return [item/magng item in my_list]
which creates list out of every item
in my_list
after dividing magng
.
finally, full function reduced 2 lines (and 1 hamper readability):
def my_norml(my_list): magng = sum(item**2 item in my_list) ** (1/2) return [item/magng item in my_list]
this more concise , idiomatic , pretty intuitive after you've learned comprehensions.
Comments
Post a Comment