リストのメンバーがクラスの場合についてです。
下記の記述により、クラスの変数値でリストの index を得ることができました。
list(map(lambda x:x.変数名, et_list)).index(変数値)
ウェブ検索でヒントになる記事はあったのですが、これと同一のサンプルは見つけられなかったのでメモを残します。Python は 3.5.2 と 3.6.0 を使いました。
サンプルです。
import datetime
from dateutil.parser import parse
class EventTimeItem:
def __init__(self, name, dt):
self.name = name
self.dt = dt
et_list = [
EventTimeItem('wake-up' , parse("Jul 16, 2017 at 06:30:22 JST")),
EventTimeItem('go-to-bed', parse("Jul 16, 2017 at 23:38:10 JST")),
EventTimeItem('dinner' , parse("Jul 16, 2017 at 19:12:22 JST")),
EventTimeItem('lunch' , parse("Jul 16, 2017 at 12:00:50 JST")),
EventTimeItem('breakfast', parse("Jul 16, 2017 at 07:00:03 JST"))
]
例えば、name が 'wake-up' の index は以下のように得られました。
>>> idx=list(map(lambda x:x.name, et_list)).index('wake-up')
>>> print(idx)
0
>>> et_list[idx].name
'wake-up'
上記と同様の確認をワンライナーでも書けます。'lunch'の場合です。
>>> et_list[list(map(lambda x:x.name, et_list)).index('lunch')].name
'lunch'
これはあまり面白くありませんね。
実際にやりたかったことは、以下のようにリストの一部を取り出すことでした。
>>> et_list=sorted(et_list, key=lambda x:x.dt, reverse=False)
>>> for e in et_list[list(map(lambda x:x.name, et_list)).index('lunch'):]:
... print(e.name)
...
lunch
dinner
go-to-bed
>>>