如何在数字列表上实现模数?

时间:2015-09-12 21:25:31

标签: python list

我有一个数字列表:

  

6,12,24,25,7,27

如何才能使模数达到26,这样如果列表中出现大于26的数字,它应该回到1?

例如,在这种情况下,除了27之外,所有数字应该保持不变,并且应该变为1。

这是我尝试运行的代码:

message = zip(message, newkeyword)
positions = [(alphabet.find(m), alphabet.find(n)) for m, n in message]
sums = [alphabet.find(m) + alphabet.find(n) for m, n in message]
#sums is were the numbers are stored
sums%=26

但我收到错误:

  

TypeError:%=的不支持的操作数类型:' list'和' int'

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

模运算符只能应用于两个数字,而不能应用于整个列表。你必须将它应用于每个项目,如下所示:

mod_sums = [s % 26 for s in sums]

使用列表推导,您可以遍历总和中的所有数字。在新的mod_sums列表中,您可以保存数字s模26。

这基本上与:

相同
mod_sums = []
for s in sums:
    mod_sums.append(s % 26)

只能用更干净的 pythonic 方式编写。

您还可以将模数直接添加到第一个列表解析中:

sums = [(alphabet.find(m) + alphabet.find(n)) % 26 for m, n in message]

答案 1 :(得分:1)

作为替代方案,如果您愿意/能够将列表转换为Numpy数组,您可以通过非常简单和pythonic的方式实现此目的(通过将模数应用于数组):

>>> import numpy as np
>>> a = np.array([6,12,24,25,7,27])
>>> a
array([ 6, 12, 24, 25,  7, 27])
>>> a%26
array([ 6, 12, 24, 25,  7,  1])