我有一个数字列表:
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'
非常感谢任何帮助。
答案 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])