Python列置换加密代码中row[curr_idx]取列而非行的原因是什么
列置换加密代码行列索引逻辑解答
这是因为你混淆了循环变量row和整个矩阵变量matrix的索引指向,核心逻辑如下:
- 首先明确矩阵的存储结构
代码里的matrix是行优先构造的二维列表,每个子元素对应矩阵的一行。你的示例中构造完成的matrix实际值为:
[ ['I', 'a', 'm'], # 第0行 ['a', 'm', 'a'], # 第1行 ['z', 'i', 'n'], # 第2行 ['g', '_', '_'] # 第3行 ]
如果你要取矩阵的第2行,写法是matrix[2],得到的就是你以为的['z','i','n']。
2. 再看列表推导式的遍历逻辑[row[curr_idx] for row in matrix]是遍历逻辑,里面的row是循环变量,每次迭代会依次拿到matrix里的每一行子列表:
- 当
curr_idx=2时,就是依次取每一行的第2个元素:- 取第0行的第2个元素:
'm' - 取第1行的第2个元素:
'a' - 取第2行的第2个元素:
'n' - 取第3行的第2个元素:
'_'
把这些元素拼接后得到man_,正好对应下标为2的列的全部内容,符合列置换按列读的加密规则。
- 取第0行的第2个元素:
内容的提问来源于stack exchange,提问作者nonslearn
相关产品推荐
相关产品推荐

