1

a次の配列では、IDがわかっているときに配列からサブ配列を選択したい

a=[['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]

私はid、つまりid456を知っています。これに基づいて、ループを使用せずに値['id456','ddf',1]を選択するにはどうすればよいですか。a

4

5 に答える 5

2
>>> a = [['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
>>> next(x for x in a if x[0] == 'id456')
['id456', 'ddf', 1]

ただし、代わりに辞書を使用することをお勧めします。

于 2012-06-04T12:58:33.827 に答える
1

これでうまくいくと思います...

filter(lambda x:x[0]=='id456',a)[0]

しかし、この場合、辞書はより良いデータ構造ではないでしょうか?

于 2012-06-04T12:57:57.393 に答える
0

辞書構造の方がはるかにうまく機能します。

b = {'id123': ['ddf', 1], 'id456': ['dff', 1], 'id789': ['ddf', 1]}
print b['id123']
于 2012-06-04T13:21:46.623 に答える
0

リストがソートされている場合は、bisectモジュールを使用できます。

>>> i = bisect.bisect_left(a, ['id456'])
>>> if i < len(a) and a[i][0]=='id456':
...     print a[i]
...
['id456', 'ddf', 1]
于 2012-06-04T13:26:22.360 に答える
0

あなたはそれをするために使うことができますnumpy.where()

a = numpy.array(a)

row = numpy.where(a == 'id456')[0]

sub_array = a[row,:]

これにより、目的のIDを持つ要素がチェックされ、それらのインデックスが返されます。例に示すように、これらのインデックスを使用して、元の配列からスライスを取得できます。

このコードは、指定されたIDに1つの行がある場合にのみ機能しますが、適応させることができます。

お役に立てれば。

于 2012-06-04T13:39:32.533 に答える