很难搞清楚这一点。我有一份清单清单。每个列表的第一个元素是名称。第二个元素是运动队(只是为了好玩)。
[['bryan', 'celtics'],
['bryan', 'bobcats'],
['bryan', 'wolves'],
['steve', 'celtics'],
['steve', 'kings'],
['steve', 'hawks'],
['david', 'celtics'],
['david', 'wolves']
['david', 'heat']]
我基本上试图为每个人找到两个团队的独特组合 - 基本上,回答这个问题,两个团队在个别玩家中最常见。因此对于布莱恩来说,有三支队伍,可能的组合是['凯尔特人队,'山猫队'],[' bobcats','狼' ;],['凯尔特人','狼']。
我可以使用的一个输出,我一直试图得到的,是另一个列表,如下所示:
[['celtics', 'bobcats'],
['bobcats', 'wolves'],
['celtics', 'wolves'],
['celtics', 'kings'],
['celtics', 'hawks'],
['kings', 'hawks'],
['celtics', 'wolves'],
['celtics', 'heat'],
['wolves', 'heat']]
然而,我最理想的输出(最终产品)将是两支球队中最高的。在上面的示例中,有2次出现(&#39; bryan&#39;和#39; david&#39;)<&#39;凯尔特人&#39;狼&#39; / p>
我试着写一个for循环,但无法弄明白。任何帮助将不胜感激。我不想使用字典。
答案 0 :(得分:0)
有两个步骤:
1)按名称对条目进行分组。那就是collection.defaultdict
方便的地方:
from collections import defaultdict
by_name = defaultdict(list) # create empty lists automatically
for name, team in teams:
by_name[name].append(team)
2)使用itertools.combinations
生成组中的对:
from itertools import combinations
for group in by_name.items():
for pair in combinations(group, 2):
yield pair # list(pair) if you need lists