行ごとに 3 つの列を持つマトリックスを Python で作成し、行のいずれかでインデックスを作成できるようにしたいと考えています。マトリックスの各値は一意です。
私が知る限り、次のようなマトリックスを設定できます。
matrix = [["username", "name", "password"], ["username2","name2","password2"]...]
ただし、そこから要素にアクセスする方法がわかりません。
ありがとう
ライブラリをインストールできる場合は、numpyの使用を検討してください。長方形の多次元配列を効率的に処理し、それらをスライスするための豊富なツール セットがあります。
リストのリストを使用できます。
In [64]: matrix = [["username", "name", "password"],["username2","name2","password2"]]
In [65]: matrix
Out[65]: [['username', 'name', 'password'], ['username2', 'name2', 'password2']]
最初の行にアクセスします (Python は 0 ベースのインデックスを使用するため):
In [66]: matrix[0]
Out[66]: ['username', 'name', 'password']
最初の行の 2 番目の項目にアクセスします。
In [67]: matrix[0][1]
Out[67]: 'name'
ユーザー名に基づいて名前を検索する場合、リストのリストはデータ構造として適切な選択ではありません。matrix
これを行うには、ユーザー名が指定されたユーザー名と一致するアイテムを見つけるために、(潜在的に) 内のすべてのアイテムをループする必要があります。検索を完了するまでの時間は、行列の行数に比例して増加します。
対照的に、辞書には、辞書に含まれるキーの数に関係なく、平均して一定時間のルックアップがあります。たとえば、次のように定義するとします。
matrix = {
'capitano': {'name':'Othello', 'password':'desi123'}
'thewife': {'name':'Desdemona', 'password':'3apples'}
}
(ここで'capitano'
と'thewife'
はユーザー名です)
次に、 username を持つ人の名前を見つけるには'capitano'
、次を使用します
matrix['capitano']['name']
Python は を返し'Othello'
ます。
関数は Python の第一級オブジェクトです。数値や文字列と同じように、関数をオブジェクトとして渡すことができます。したがって、たとえば、関数を辞書の (キー、値) ペアの値として格納できます。
from __future__ import print_function
matrix = {'hello': {'action': lambda: print('hello')} }
次に、関数を呼び出します (括弧に注意してください)。
matrix['hello']['action']()
# hello
あなたが示したのは、リストのリストで構成されるマトリックスです。
行と列のインデックスを使用して要素にアクセスできます。
>>> matrix[0] # This will return the 0th row
['username', 'name', 'password']
>>> matrix[0][1] # This will return the element from row 0, col 1
'name'