在列表列表中查找元素的唯一组合

时间:2014-07-16 06:13:46

标签: python

很难搞清楚这一点。我有一份清单清单。每个列表的第一个元素是名称。第二个元素是运动队(只是为了好玩)。

[['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循环,但无法弄明白。任何帮助将不胜感激。我不想使用字典。

1 个答案:

答案 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