0

假设我有一个这样的矩阵

table =  [
# grid: 4 by 9
['A','B','C','D'],
['E','F','G','H'],
['I','J','K','L'],
['M','N','O','P'],
['Q','R','S','T'],
['U','V','W','X'],
['Y','Z','1','2'],
['3','4','5','5'],
['7','8','9','0'],
]

如果我想在第三列(2x,3y)上打印两个向下的字符串,导致 G. 或类似的东西。我如何告诉 python 它应该是一个网格?以及如何返回列表信息,table.find(something) 不起作用(说 table 没有 find 属性)我对 python 相当陌生。我已经搜索了互联网,没有太多帮助..

编辑:我一定做错了什么?

table =  [
# grid: 4 by 9
# 1   2   3   4  
['A','B','C','D'],#1
['E','F','G','H'],#2
['I','J','K','L'],#3
['M','N','O','P'],#4
['Q','R','S','T'],#5
['U','V','W','X'],#6
['Y','Z','1','2'],#7
['3','4','5','5'],#8
['7','8','9','0'],#9
]
print table[1][2], table[4][3]

打印 O 和 T。O 是对的,但 T 不是,那是第 5 行不是吗?

我正在尝试使用文本矩阵编写文本位置加密算法,例如著名的密码之一(我不记得它的名称)。

我想将每个字母的所述打印应用于 raw_input 捕获的文本,我以前使用过字典,但如果可能的话,我想尝试这种行/列方法,它会更难破解。

4

4 回答 4

2

table[1][2]将给出第二行第三列中的值(因为索引从 0 开始)。

更具体地说,您指定的是list 的列表,因此table[1]将解析为['E','F','G','H'](整个列表中的第二项),然后将其中的第三个元素[2]'G'.

于 2012-10-26T06:33:38.900 回答
1
table =  [
['A','B','C','D'],
['E','F','G','H'],
['I','J','K','L'],
['M','N','O','P'],
['Q','R','S','T'],
['U','V','W','X'],
['Y','Z','1','2'],
['3','4','5','5'],
['7','8','9','0'],
]
# grid 4 by 9, 4 column, 9 row
rownum=3
colnum=2
print(table[rownum-1][colnum-1])
于 2012-10-26T06:41:36.173 回答
1

列表索引从零开始,例如,列表中的第四个元素的索引为 3。您可以定义一个辅助函数来通过它们的“实际位置”获取项目/列。

def column(matrix, i):
    return [row[i-1] for row in matrix]
column(table,2)

Out[15]:
['B', 'F', 'J', 'N', 'R', 'V', 'Z', '4', '8']

def getitem(matrix,row,column):
    return matrix[row-1][column-1]
getitem(table,2,3)

Out[16]:
'G'

至于您的编辑,table[1][2]应该 print G,而不是O正确table[4][3]返回T

于 2012-10-26T06:52:14.213 回答
1

您指的是http://en.wikipedia.org/wiki/Vigenere_cipher吗?

如果你想使用矩阵,那么numpy推荐(一个简单的例子):

>>> import numpy as np
>>> a = np.array(table)
>>> a
array([['A', 'B', 'C', 'D'],
       ['E', 'F', 'G', 'H'],
       ['I', 'J', 'K', 'L'],
       ['M', 'N', 'O', 'P'],
       ['Q', 'R', 'S', 'T'],
       ['U', 'V', 'W', 'X'],
       ['Y', 'Z', '1', '2'],
       ['3', '4', '5', '5'],
       ['7', '8', '9', '0']], 
      dtype='|S1')
>>> print a[1,2]
G
>>> np.where(a=='G')
(array([1]), array([2]))

还有一个经常被忽略的字符串方法可以用来替换文本(不管你决定这样做)......

>>> from string import maketrans
>>> trans = maketrans('AB', 'XY') # A->X, B->Y, everything else unchanged
>>> 'ABC'.translate(trans)
'XYC'
于 2012-10-26T08:31:33.643 回答