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

Python 在列表列表中查找元素的唯一组合,python,Python,弄清楚这件事有很多困难。我有一份清单。每个列表的第一个元素是名称。第二个要素是运动队(只是为了好玩) 我基本上是在试图为每个人找到两支球队的独特组合——基本上是回答这个问题,哪两支球队是个人球员中最常见的。所以对于布莱恩来说,有三支球队,可能的组合是[‘凯尔特人’、[山猫]、[山猫]、[狼]、[凯尔特人]、[狼] 我可以使用的一个输出(我一直在尝试获得)是另一个列表,如下所示: [['celtics', 'bobcats'], ['bobcats', 'wolves'], ['celtics',

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

我基本上是在试图为每个人找到两支球队的独特组合——基本上是回答这个问题,哪两支球队是个人球员中最常见的。所以对于布莱恩来说,有三支球队,可能的组合是[‘凯尔特人’、[山猫]、[山猫]、[狼]、[凯尔特人]、[狼]

我可以使用的一个输出(我一直在尝试获得)是另一个列表,如下所示:

[['celtics', 'bobcats'],
['bobcats', 'wolves'],
['celtics', 'wolves'],
['celtics', 'kings'],
['celtics', 'hawks'],
['kings', 'hawks'],
['celtics', 'wolves'],
['celtics', 'heat'],
['wolves', 'heat']]
然而,我最想要的输出(最终产品)将是找到两个团队的最高计数。在上面的例子中,这将是[‘凯尔特人’,‘狼’],出现两次(与‘布莱恩’和‘大卫’)

我试图写一个for循环,但没能完全理解。任何帮助都将不胜感激。我不想使用字典。

有两个步骤:

1) 按名称对条目进行分组。这就是方便的地方:

from collections import defaultdict
by_name = defaultdict(list)    # create empty lists automatically
for name, team in teams:
    by_name[name].append(team)
2) 使用以下命令从组中生成对:


“我不喜欢使用字典。”-为什么?所以,你把它分成两个子任务:1)按人分组,2)为每个小组生成对。我以前做过,你需要使用递归方法。你可以用一张单子,一本字典确实让这项工作很痛苦。我同意@merlin2011,所以我不会给你我的代码。祝你好运如果这是最简单的方法,我可以使用字典。我有一个篮球分析博客,正在进行分析(并自学python),我希望有人能为我指明正确的方向,告诉我如何使用它python@merlin2011我几年前就上学了,即使是家庭作业,难道这不应该鼓励别人学习吗?我只是试着了解自己,找不到任何类似于处理列表的东西
from collections import defaultdict
by_name = defaultdict(list)    # create empty lists automatically
for name, team in teams:
    by_name[name].append(team)
from itertools import combinations

for group in by_name.items():
    for pair in combinations(group, 2):
        yield pair  # list(pair) if you need lists