如何根据对象属性切片对象列表
我有一个比赛列表。每场比赛都有一个主队和一个客队的属性。我想根据主队和客队来切分这个列表。切分后的列表应该包含主队的项目和客队的项目。
更简单的做法是先切分比赛列表,然后再分别创建一个新的列表,里面放主队和客队的对应项目。我想知道有没有办法一步到位完成这个操作。
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]]