Pythonでリスト要素を含むインデックスを検索し、indexがエラーを報告しました!!!
3131 ワード
リスト
一、index
次のように警告します.
注意してください.これはこの質問に答える最も徹底的な方法かもしれませんが、
私が使用したほとんどの場所
要素がリストにない場合は、
アイテムが存在しない場合は、
アイテムがリストにない場合は、まず、 をチェックします.は、
二、
リストとしての理解:
ここにはもう一つの小さな解決策
大きなリストの場合、これは
三、NumPy
すべてのインデックスが必要な場合は、NumPyを使用します.
読みやすいソリューションです.
四、zip
["foo", "bar", "baz"]
とリスト中の項目"bar"
について、Pythonでインデックス(1)を取得するにはどうすればいいですか?一、index
>>> ["foo", "bar", "baz"].index("bar")
1
次のように警告します.
注意してください.これはこの質問に答える最も徹底的な方法かもしれませんが、
index
はかなり弱いコンポーネントlist
APIですが、私は最後にその怒りを使ったことを覚えていません.コメントでは、この答えが大量に引用されているので、より完全であるべきだと指摘しています.list.index
に従ういくつかの警告について.最初にドキュメント文字列を表示する必要がある場合があります.>>> print(list.index.__doc__)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.
私が使用したほとんどの場所
index
は、より普及しているため、リストの導出またはジェネレータ式を使用しています.したがって、index
の使用を検討している場合は、これらの優れたpython機能を確認してください.要素がリストにない場合は、
アイテムが存在しない場合は、
index
結果ValueError
が呼び出されます.>>> [1, 1].index(2)
Traceback (most recent call last):
File "", line 1, in
ValueError: 2 is not in list
アイテムがリストにない場合は、
item in my_list
(クリーン、読み取り可能な方法)、またはindex
呼をtry/except
によってキャプチャされたブロック中のValueError
に包む(少なくとも検索リストが長い場合、この項目は通常存在する.)二、
enumerate()
ほとんどの答えでは、単一のインデックスを検索する方法が説明されていますが、アイテムがリストに複数回存在する場合、それらのメソッドは複数のインデックスを返しません.用途enumerate()
:for i, j in enumerate(['foo', 'bar', 'baz']):
if j == 'bar':
print(i)
index()
関数は、最初の一致のみを返し、enumerate()
はすべての一致を返します.リストとしての理解:
[i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']
ここにはもう一つの小さな解決策
itertools.count()
(列挙とほぼ同じ):from itertools import izip as zip, count # izip for maximum efficiency
[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']
大きなリストの場合、これは
enumerate()
を使用するよりも有効です.$ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop
三、NumPy
すべてのインデックスが必要な場合は、NumPyを使用します.
import numpy as np
array = [1, 2, 1, 3, 4, 5, 1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0, 2, 6], dtype=int64),)
読みやすいソリューションです.
四、zip
zip
の機能を持つすべてのインデックス:get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]
print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')