1 回答

TA贡献1802条经验 获得超5个赞
首先,让我们将其推广到任意数量的组
GroupA = [('Joe', 1), ('Kate', 2), ('Jeff', 1)]
GroupB = [('Sam', 1), ('Jim', 2), ('Stephanie', 2)]
GroupC = [('Adam', 2), ('David', 1), ('Liz', 1), ('Michael', 2)]
groups = [GroupA, GroupB, GroupC]
然后我们将遍历组,并根据需要重复元素(优先考虑 1)。我们还将从列表中的每个元素中去除排名。
max_len = max(map(len, groups))
names = []
for group in groups:
subgroup = list(group)
if any(rank == 1 for _, rank in group):
subgroup = list(filter(lambda x:x[1] == 1, group))
group += subgroup * (max_len - len(group))
names.append([name for name, _ in group])
现在,名称包含名称列表,名称至少重复多次以匹配最长的组(可能更多,这zip将被修剪)。
我们将知道将这些列表压缩在一起,并获得我们的团队。
teams = list(zip(*names))
结果:
>>> print("\n".join(map(str, teams)))
('Joe', 'Sam', 'Adam')
('Kate', 'Jim', 'David')
('Jeff', 'Stephanie', 'Liz')
('Joe', 'Sam', 'Michael')
添加回答
举报