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

3番目の列(2x、3y)に2つ下の文字列を印刷したい場合、G.または行に沿って何かが表示されます。グリッドであることを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 行目ですよね?」

有名な暗号の1つのように、テキストマトリックスを使用してテキスト位置暗号化アルゴリズムを作成しようとしています(名前を思い出せません)。

raw_input によってキャッチされたテキストに各文字の上記の印刷を適用したいのですが、以前は辞書を使用していましたが、可能であればこの行/列の方法を試してみたいと思います。

4

4 に答える 4

2

table[1][2]2 行目の 3 列目に値が表示されます (インデックスは 0 から始まるため)。

より具体的には、指定しているのはリストのリストであるため、 (リスト全体の 2 番目の項目) にtable[1]解決され、その 3 番目の要素を with で取得すると、が得られます。['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

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 に答える
1

リストのインデックスはゼロから始まるため、たとえば、リストの 4 番目の要素のインデックスは 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]れるはずです。GOtable[4][3]T

于 2012-10-26T06:52:14.213 に答える