更多的pythonic /高效循环嵌套

用户名

我来自Java背景并且是python的新手

有没有更有效或更Pythonic的写作方式:

S_BOX_TABLE = [
    [BitArray('0x63'), BitArray('0x7C'), BitArray('0x77'), BitArray('0x7B'), BitArray('0xF2'), BitArray('0x6B'), BitArray('0x6F'), BitArray('0xC5'), BitArray('0x30'), BitArray('0x01'), BitArray('0x67'), BitArray('0x2B'), BitArray('0xFE'), BitArray('0xD7'), BitArray('0xAB'), BitArray('0x76')],
    [BitArray('0xCA'), BitArray('0x82'), BitArray('0xC9'), BitArray('0x7D'), BitArray('0xFA'), BitArray('0x59'), BitArray('0x47'), BitArray('0xF0'), BitArray('0xAD'), BitArray('0xD4'), BitArray('0xA2'), BitArray('0xAF'), BitArray('0x9C'), BitArray('0xA4'), BitArray('0x72'), BitArray('0xC0')],
    [BitArray('0xB7'), BitArray('0xFD'), BitArray('0x93'), BitArray('0x26'), BitArray('0x36'), BitArray('0x3F'), BitArray('0xF7'), BitArray('0xCC'), BitArray('0x34'), BitArray('0xA5'), BitArray('0xE5'), BitArray('0xF1'), BitArray('0x71'), BitArray('0xD8'), BitArray('0x31'), BitArray('0x15')],
    [BitArray('0x04'), BitArray('0xC7'), BitArray('0x23'), BitArray('0xC3'), BitArray('0x18'), BitArray('0x96'), BitArray('0x05'), BitArray('0x9A'), BitArray('0x07'), BitArray('0x12'), BitArray('0x80'), BitArray('0xE2'), BitArray('0xEB'), BitArray('0x27'), BitArray('0xB2'), BitArray('0x75')],
    [BitArray('0x09'), BitArray('0x83'), BitArray('0x2C'), BitArray('0x1A'), BitArray('0x1B'), BitArray('0x6E'), BitArray('0x5A'), BitArray('0xA0'), BitArray('0x52'), BitArray('0x3B'), BitArray('0xD6'), BitArray('0xB3'), BitArray('0x29'), BitArray('0xE3'), BitArray('0x2F'), BitArray('0x84')],
    [BitArray('0x53'), BitArray('0xD1'), BitArray('0x00'), BitArray('0xED'), BitArray('0x20'), BitArray('0xFC'), BitArray('0xB1'), BitArray('0x5B'), BitArray('0x6A'), BitArray('0xCB'), BitArray('0xBE'), BitArray('0x39'), BitArray('0x4A'), BitArray('0x4C'), BitArray('0x58'), BitArray('0xCF')],
    [BitArray('0xD0'), BitArray('0xEF'), BitArray('0xAA'), BitArray('0xFB'), BitArray('0x43'), BitArray('0x4D'), BitArray('0x33'), BitArray('0x85'), BitArray('0x45'), BitArray('0xF9'), BitArray('0x02'), BitArray('0x7F'), BitArray('0x50'), BitArray('0x3C'), BitArray('0x9F'), BitArray('0xA8')],
    [BitArray('0x51'), BitArray('0xA3'), BitArray('0x40'), BitArray('0x8F'), BitArray('0x92'), BitArray('0x9D'), BitArray('0x38'), BitArray('0xF5'), BitArray('0xBC'), BitArray('0xB6'), BitArray('0xDA'), BitArray('0x21'), BitArray('0x10'), BitArray('0xFF'), BitArray('0xF3'), BitArray('0xD2')],
    [BitArray('0xCD'), BitArray('0x0C'), BitArray('0x13'), BitArray('0xEC'), BitArray('0x5F'), BitArray('0x97'), BitArray('0x44'), BitArray('0x17'), BitArray('0xC4'), BitArray('0xA7'), BitArray('0x7E'), BitArray('0x3D'), BitArray('0x64'), BitArray('0x5D'), BitArray('0x19'), BitArray('0x73')],
    [BitArray('0x60'), BitArray('0x81'), BitArray('0x4F'), BitArray('0xDC'), BitArray('0x22'), BitArray('0x2A'), BitArray('0x90'), BitArray('0x88'), BitArray('0x46'), BitArray('0xEE'), BitArray('0xB8'), BitArray('0x14'), BitArray('0xDE'), BitArray('0x5E'), BitArray('0x0B'), BitArray('0xDB')],
    [BitArray('0xE0'), BitArray('0x32'), BitArray('0x3A'), BitArray('0x0A'), BitArray('0x49'), BitArray('0x06'), BitArray('0x24'), BitArray('0x5C'), BitArray('0xC2'), BitArray('0xD3'), BitArray('0xAC'), BitArray('0x62'), BitArray('0x91'), BitArray('0x95'), BitArray('0xE4'), BitArray('0x79')],
    [BitArray('0xE7'), BitArray('0xC8'), BitArray('0x37'), BitArray('0x6D'), BitArray('0x8D'), BitArray('0xD5'), BitArray('0x4E'), BitArray('0xA9'), BitArray('0x6C'), BitArray('0x56'), BitArray('0xF4'), BitArray('0xEA'), BitArray('0x65'), BitArray('0x7A'), BitArray('0xAE'), BitArray('0x08')],
    [BitArray('0xBA'), BitArray('0x78'), BitArray('0x25'), BitArray('0x2E'), BitArray('0x1C'), BitArray('0xA6'), BitArray('0xB4'), BitArray('0xC6'), BitArray('0xE8'), BitArray('0xDD'), BitArray('0x74'), BitArray('0x1F'), BitArray('0x4B'), BitArray('0xBD'), BitArray('0x8B'), BitArray('0x8A')],
    [BitArray('0x70'), BitArray('0x3E'), BitArray('0xB5'), BitArray('0x66'), BitArray('0x48'), BitArray('0x03'), BitArray('0xF6'), BitArray('0x0E'), BitArray('0x61'), BitArray('0x35'), BitArray('0x57'), BitArray('0xB9'), BitArray('0x86'), BitArray('0xC1'), BitArray('0x1D'), BitArray('0x9E')],
    [BitArray('0xE1'), BitArray('0xF8'), BitArray('0x98'), BitArray('0x11'), BitArray('0x69'), BitArray('0xD9'), BitArray('0x8E'), BitArray('0x94'), BitArray('0x9B'), BitArray('0x1E'), BitArray('0x87'), BitArray('0xE9'), BitArray('0xCE'), BitArray('0x55'), BitArray('0x28'), BitArray('0xDF')],
    [BitArray('0x8C'), BitArray('0xA1'), BitArray('0x89'), BitArray('0x0D'), BitArray('0xBF'), BitArray('0xE6'), BitArray('0x42'), BitArray('0x68'), BitArray('0x41'), BitArray('0x99'), BitArray('0x2D'), BitArray('0x0F'), BitArray('0xB0'), BitArray('0x54'), BitArray('0xBB'), BitArray('0x16')]]

for k in range(len(state_matrix)):
    for l in range(len(state_matrix[k])):
        state_matrix[k][l] = self.__sBoxSubstitution(state_matrix[k][l])

def __sBoxSubstitution(self, byte):
    column, row = byte.cut(4)
    return self.S_BOX_TABLE[row.int][column.int]
阿南德·库玛(Anand S Kumar)

一些事情 -

  1. 您可以直接遍历列表,不需要花费其长度,然后遍历索引并使用索引获取元素。

  2. 似乎对于2D列表中的每个项目,您都在运行一个函数并将函数的结果存储回去,您可以为此使用列表理解(它们可能比for-for循环对象快一点,尽管这样做会创建一个新矩阵,并将新矩阵分配给state_matrix)

代码 -

state_matrix[:] = [[self.__sBoxSubstitution(y) for y in x] for x in state_matrix ]

分配给state_matrix原位,因为这将是原始嵌套循环的确切行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章