- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Coursera 上关注生物信息学 I。我的一位同学使用函数式编程解决了一个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
的使用。我不明白上面的功能解决方案如何能够模仿以下传统方法的功能。计算 i
的 4 次方。
for i, val in enumerate(pattern[::-1]):
total += dict[val] * (4**i)
那么 lambda 的主体在哪里(或如何)计算 code[c]
的 4 次方?
最佳答案
首先,让我们看一下reduce函数:
reduce(lambda x,c: 4*x+code[c], pattern, 0)
这会将当前值乘以 4
并添加模式中的当前元素。写出来看起来像这样:
x=0
(初始值)c="A"
,结果为:4*x+code["A"] = code["A"]
x=code["A"]
(上一个结果)c="C"
,结果是`4*x+code["C"] = 4 *代码[“A”] +代码[“C”]x=4*code["A"] + code["C"]
, c="G"
, 结果为4*x+代码["G"] = 4*(4*代码["A"] + 代码["C"]) + 代码["G"] = 4**2 * 代码["A"] + 4 * 代码[ "C"] + code["G"]
x=4**2 * code["A"] + 4 * code["C"] + code["G"]
, c="T"
,结果是 4*x+code["T"] = 4*(4**2 * code["A"] + 4 * code["C"] + code["G"]) + 代码["T"] = 4**3 * 代码["A"] + 4**2 * 代码["C"] + 4 * 代码["G"] + 代码["T"]
其中每个序列元素都有 4
的正确幂。
所以诀窍在于 reduce
函数的 4*x
,它最终将模式中的第一个元素乘以 4
恰好 len-1
次,第二个元素乘以 4 len-2
次等
关于python - 此代码如何计算 4 的 <exponent> 次方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58094588/
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
有没有办法用科学记数法打印少于 3 位的指数部分?6.1 格式不影响指数,只影响数字部分: var=1.23e-9; printf ("%e\n", var); printf ("%6.1e\n",
我遇到了语法错误。每次运行 Javascript 时都缺少指数。 function randomendtime(len) { var chars = ["10.202", "11.121", "1
我有一个 rc 条目: {CC6C210B-2EAC-4F6C-89E7-0D2FEFFCE278} 8000 "MyFile.txt" 当我使用cgrc.exe或brcc32.exe编译rc文件
请引用JSfiddle http://jsfiddle.net/uv7ng/3/ 我已经编写了一个JS函数,并希望通过使用以下语句将onclick事件处理程序分配给第466行上的提交按钮“edit-n
我有以下 JRuby 代码: def knuth(a, n, b) if n ==1 r = a**b else r = 1 b.times do
math.exp() 不适用于复数: >>> math.exp (math.pi*1j) Traceback (most recent call last): File "", line 1, i
我目前正在研究 Javascript 中的递归函数,大部分情况下我了解什么是递归以及如何使用它,但我有一个问题:为什么我需要“为什么我需要添加 [exponent - 1” ] 在‘堆栈’之后?”这是
有没有办法分别获取轴刻度标签的尾数和指数,以便我可以操纵它们的显示方式?我需要它们看起来像“5x10-9”,而不是通常的科学记数法“5.0e-9”。 如果我在 gnuplot 中这样做,我会做类似的事
我在 Coursera 上关注生物信息学 I。我的一位同学使用函数式编程解决了一个pattern_to_number 问题: #!/usr/bin/env python # -*- coding: u
我对 pow(exponent) 方法做了一些测试。不幸的是,我的数学能力不足以解决以下问题。 我正在使用这段代码: BigInteger.valueOf(2).pow(var); 结果: 变种 |以
我正在使用 scipy.stats.expon.fit(data) 对我的数据进行指数分布拟合。这似乎返回了两个我期望的值。文档 online似乎没有说明 fit() 返回什么,但查看源代码,我猜它既
在Fortran中,如果我设置rk=SELECTED_REAL_KIND(20),为分数保留多少位,为指数保留多少位?
我正在使用 Mathematica 8 寻找表达式最大值的解析解。当我使用 Maximize 命令试图找到解决方案时,它只是重复我输入的内容,这意味着 Mathematica 不知道如何去做。我已将问
Quartus编译器在此行报告上述错误消息 constant LIMIT : float (5 downto -27) := 1E-12; 常量是浮点类型,为什么将其视为整数? 该常数仅在if语句中使
如何组合或扩展 sage 表达式中的指数?换句话说,我怎么能让 sage 重写来自 (a**b)**c 的表达式至 a**(b*c) ,反之亦然? 示例: sage: var('x y') (x, y
我正在使用已知的强碱基 {2, 7, 61} 来求解 Miller-Rabin。假设我在这段代码中取 a = 2 和 n = 5 来测试它的素性。 n-1 的因式分解,即 4,是 2*2*1,所以我的
有没有办法以科学计数法打印数字的指数部分少于 3 位?6.1 格式不影响指数,只影响数字部分: var=1.23e-9; printf ("%e\n", var); printf ("%6.1e\n"
我是密码世界的新手。我需要从下面提供的数据中生成相应的 RSA 私钥。 Modulus B87BDAB530F8FDED78223D841C5D4E66A6CA86E1D690E829755F244B
这个问题已经有答案了: Is floating point math broken? (33 个回答) Strange Result for Math.pow() in JavaScript acro
我是一名优秀的程序员,十分优秀!