2012-10-26 109 views
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'], 
] 

矩阵如果我想要打印的字符串这就是两下的第三列(2倍,3年),导致G.或者沿线的东西。我如何告诉python它应该是一个网格?我如何返回列表信息,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. Ø是正确的,但T不是,那是第5行是不是?”

我想写一个文本位置加密算法与文本矩阵,就像着名的密码之一(我不记得名字)。

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

回答

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]应打印G,不Otable[4][3]正确返回T

2

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

更具体地说,什么你指定的列表的列表,因此table[1]将解析为['E','F','G','H'](第二项整体清单),然后服用了第三个要素与[2]会给你'G'

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]) 
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'