LoginSignup
2
2

More than 5 years have passed since last update.

Python クラスのリスト、クラス変数値で index

Last updated at Posted at 2017-07-16

リストのメンバーがクラスの場合についてです。
下記の記述により、クラスの変数値でリストの 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
>>> 
2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2