【问题标题】:How to slice a list of objects in association of the object attributes如何根据对象属性对对象列表进行切片
【发布时间】:2010-04-25 06:41:34
【问题描述】:

我有一个赛程列表。每个赛程都有一个主俱乐部和一个客场俱乐部属性。我想根据主俱乐部和客场俱乐部的关联对列表进行切片。切片列表应该是主俱乐部项目和客场俱乐部项目。

实现这一点的更简单方法是首先对赛程列表进行切片。然后制作相应的主队和客队俱乐部的新列表。我想知道我们是否可以做到这一点。

【问题讨论】:

    标签: python list object


    【解决方案1】:

    不清楚您要做什么,但此代码将采用前五个固定装置,并返回一个元组列表,每个元组都包含相应对象的 home 值和 away 值:

    result = [(i.home, i.away) for i in fixtures[:5]]
    

    这会将两者分成两个列表:

    homes = [i.home for i in fixtures[:5]]
    aways = [i.away for i in fixtures[:5]]
    

    或单行:

    homes, aways = [i.home for i in fixtures[:5]], [i.away for i in fixtures[:5]]
    

    【讨论】:

    • 感谢您的回复。正是我所需要的
    • @gizgok:如果这正是您所需要的,请不要忘记接受答案(当网站给您机会时)。传播业力!
    • @Max 我正在尝试这样做: clubs=[c.home,c.away in fixtures[:5]] 它给出了一个错误。请原谅我缺乏对 python 的了解,但是如果可以的话,这可以在一个 stmt 中再次完成吗
    • @gizgok:你忘了for c 部分:clubs = [c.home, c.away for c in fixtures[:5]]
    【解决方案2】:

    不是您想要的答案,但是(假设 [(home1, away1), (home2, away2), ...])这与您将得到的一样简单。

    homes = [h for h,a in fixtures]
    aways = [a for h,a in fixtures]
    

    【讨论】:

      【解决方案3】:

      当然,还有一些工作:

      def split(fixture):
          home, away = [], []
          for i, f in enumerate(fixture):
              if i >= 5:
                  home.append(f.home)
                  away.append(f.away)
          return home, away
      

      或者:

      home, away = zip(*itertools.imap(operator.attrgetter('home', 'away'),
          itertools.islice(fixture, 5, None)))
      

      【讨论】:

      • 是的,这项工作也做得很好
      猜你喜欢
      • 2022-01-11
      • 2022-01-05
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多