gpt4 book ai didi

python - 此代码如何计算 4 的 次方

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:46 25 4
gpt4 key购买 nike

我在 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

我理解lambdareduce 的使用。我不明白上面的功能解决方案如何能够模仿以下传统方法的功能。计算 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 并添加模式中的当前元素。写出来看起来像这样:

  1. x=0(初始值)c="A",结果为:4*x+code["A"] = code["A"]
  2. x=code["A"](上一个结果)c="C",结果是`4*x+code["C"] = 4 *代码[“A”] +代码[“C”]
  3. x=4*code["A"] + code["C"], c="G", 结果为4*x+代码["G"] = 4*(4*代码["A"] + 代码["C"]) + 代码["G"] = 4**2 * 代码["A"] + 4 * 代码[ "C"] + code["G"]
  4. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com