リストを反復処理していて、特定の条件を満たす場合にアイテムのインデックスを出力したいです。どうすればいいでしょうか?
例:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
ベストアンサー1
うーん。ここにはリスト内包表記の回答があったのですが、消えてしまいました。
ここ:
[i for i,x in enumerate(testlist) if x == 1]
例:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
アップデート:
さて、ジェネレータ式が必要な場合は、ジェネレータ式を使用します。ここで、 for ループ内のリストの理解を再度示します。
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
では、ジェネレータを構築してみましょう...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
そして、とても便利なことに、それを変数に割り当てて、そこから使用することができます...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
昔はFORTRANを書いていたのに。