python - 为什么每次迭代都必须执行取模?

标签 python math modulo rosalind

这是我偶然发现正确答案的问题之一,但我不明白为什么它是正确的,而且维基百科没有帮助。对于 Rosalind,我编写了一个简单的脚本,用于从蛋白质字符串中获取所有可能的 RNA 序列的数量(模 1,000,000)。我知道这不是最有效的代码 (部分是因为我回收了以前制作的东西),但它是:

protein = """<large protein string>"""
protein = ''.join(protein.split('\n'))

translate = {'UUU' : 'F','CUU' : 'L','AUU' : 'I','GUU' : 'V','UUC' : 'F','CUC' : 'L','AUC' : 'I','GUC' : 'V','UUA' : 'L','CUA' : 'L','AUA' : 'I','GUA' : 'V','UUG' : 'L','CUG' : 'L','AUG' : 'M','GUG' : 'V','UCU' : 'S','CCU' : 'P','ACU' : 'T','GCU' : 'A','UCC' : 'S','CCC' : 'P','ACC' : 'T','GCC' : 'A','UCA' : 'S','CCA' : 'P','ACA' : 'T','GCA' : 'A','UCG' : 'S','CCG' : 'P','ACG' : 'T','GCG' : 'A','UAU' : 'Y','CAU' : 'H','AAU' : 'N','GAU' : 'D','UAC' : 'Y','CAC' : 'H','AAC' : 'N','GAC' : 'D','UAA' : 'Stop','CAA' : 'Q','AAA' : 'K','GAA' : 'E','UAG' : 'Stop','CAG' : 'Q','AAG' : 'K','GAG' : 'E','UGU' : 'C','CGU' : 'R','AGU' : 'S','GGU' : 'G','UGC' : 'C','CGC' : 'R','AGC' : 'S',
'GGC' : 'G','UGA' : 'Stop','CGA' : 'R','AGA' : 'R','GGA' : 'G','UGG' : 'W','CGG' : 'R','AGG' : 'R','GGG' : 'G',
}
aminos = translate.values()
sample = [l for l in protein] + ['Stop']

score = []
for s in sample:
    c = aminos.count(s)
    score.append(c)

import math
result = reduce(lambda x, y: x*y, score) % 1000000
print result

这会计算 RNA 序列的总数并取最终结果的模(或者我认为是这样)。在我决定尝试这个之前,我得到了两次错误的答案:

import math
result = reduce(lambda x, y: x*y % 1000000, score)
print result

这显然产生了正确的答案。为什么必须对每个 x*y 执行取模?是我不理解模数还是我不理解Python?

编辑:抱歉,打字错误。

最佳答案

两者的区别

reduce(lambda x, y: x*y, score) % 1000000

reduce(lambda x, y: x*y % 1000000, score)

第一个必须使用 long 直到 score 中所有值的乘积,而第二个将使用不大于 的值最大值(分数)* 999999

任意大的整数不能存储在有限的内存中,也不能在恒定时间内计算它们的乘积,因此您更有可能遇到 OutOfMemoryError 或在第一个整数上花费很长时间选项

关于python - 为什么每次迭代都必须执行取模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390882/

相关文章:

c# - python: c# 二进制日期时间编码

Python:如何使用 .split 命令计算句子中的平均字长?

java - 如何获得标准差

C++ - 无符号整数的模

excel - Excel中有没有办法重置累计总数?

python - tensorflow MNIST : terminate called after throwing an instance of 'std::bad_alloc'

python - 平均分箱中的数据

algorithm - 找到给定音调和 987654321 的除法余数

android - 为什么 Matrix.MutiplyMV 顺时针旋转向量?

使用C中的黄金比例计算第n个斐波那契数模m