Я следую Биоинформатика I на Coursera.Один из моих сокурсников использовал функциональное программирование для решения проблемы pattern_to_number
:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from functools import reduce
def pattern_to_number(pattern):
code = dict(zip("ACGT",range(4)))
return reduce(lambda x,c: 4*x+code[c], pattern, 0)
print(pattern_to_number(sys.argv[1]))
Вот как я запускаю небольшую программу локально:
$ python3 ./pattern_to_number.py 'ATGCAA'
И вывод (правильный): 912
Я понимаю lambda
и использование reduce
.Я не понимаю, как приведенное выше функциональное решение может имитировать функциональность следующего традиционного подхода.Где вычисляется 4 в степени i
.
for i, val in enumerate(pattern[::-1]):
total += dict[val] * (4**i)
Так где (или как) тело лямбды вычисляет 4 в степени code[c]
?