如何根据对象属性切片对象列表

2 投票
3 回答
707 浏览
提问于 2025-04-15 21:59

我有一个比赛列表。每场比赛都有一个主队和一个客队的属性。我想根据主队和客队来切分这个列表。切分后的列表应该包含主队的项目和客队的项目。

更简单的做法是先切分比赛列表,然后再分别创建一个新的列表,里面放主队和客队的对应项目。我想知道有没有办法一步到位完成这个操作。

3 个回答

0

当然,这需要一些努力:

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)))
0

这可能不是你想要的答案,但(假设数据是[(home1, away1), (home2, away2), ...])这已经是相对简单的写法了。

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

你想做的事情不是很清楚,不过这段代码会取前五个比赛安排,然后返回一个包含元组的列表,每个元组里都有主场和客场的值:

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]]

撰写回答