0

各「行」にインデックス、名前、パス[(1L, "bar", "foo/bar"), (2L, "app", "some/app"),]などがある2Dリストがあります。指定されたこの2Dリストとインデックスから「行」を取得しようとしています。たとえば、インデックス1はを返す必要があり(1L, "bar", "foo/bar")ます。リスト全体をループして、次のようなオブジェクトが見つかるまでインデックスを比較できることはわかっています。

my_index = 1    
for row in my_list:
    if (row[0] == my_index)
        return row
return False

私はPythonを初めて使用するので、Pythonでこれを行うためのよりクリーンで優れた方法があるかどうか疑問に思いました。リストからインデックスを返すリストのインデックスメソッドがあることは知っていますが、2Dリストでそれをどのように使用できるかわかりません。前もって感謝します!また、各オブジェクトのインスタンスは1つだけであると想定できます(つまり、重複はありません)。

4

2 に答える 2

1

リストの代わりに辞書を使用した方がよいように思われるため、データは次のようになります。

my_dict = {1L: (1L, "bar", "foo/bar"),
           2L: (2L, "app", "some/app")}

これにより、インデックスによって各要素に効率的にアクセスできます。

>>> my_dict[1]
(1L, 'bar', 'foo/bar')

リストから辞書を作成する方法は次のとおりです。

my_dict = {row[0]: row for row in my_list}

または Python 2.6 以下の場合:

my_dict = dict((row[0], row) for row in my_list)
于 2012-09-17T23:03:29.197 に答える
0

リストが静的な場合 (リストにアイテムを追加/削除しないことを意味します)、ソートを検討することをお勧めします。

デフォルトでは、タプルは最初の要素でソートされるため、my_list[x-1] インデックスが xであるソート済みリストが必要です。

my_list.sort()
row = my_list[my_index - 1]
于 2012-09-17T23:02:28.973 に答える