2017-02-25 35 views
-2
的列表中的项目可能的组合

假设我有一个嵌套列表看起来像这样:的Python:在列表

nested_list = [[a,b,1],[c,d,3],[a,f,8],[a,c,5]] 

现在我想要得到的列表的第二项之间的所有可能的组合,但只如果两个列表中的第一项都相等。那么应该怎么打印如下:

Combinations for 'a' as first item in the lists: [b,f], [b,c], [f,c] 

我想出了这一点:

comprehension = [x[0] for x in nested_list if x[1] in nested_list] 

但这不起作用(ofcourse)。我不知道如何遍历所有列表才能找到组合。

+0

看起来你要我们写一些代码给你。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。展示这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3

回答

0

您可以使用collectoins.defaultdictcombinations

In [2]: nested_list = [['a','b',1],['c','d',3],['a','f',8],['a','c',5]] 

In [3]: from collections import defaultdict 

In [4]: from itertools import combinations 

In [5]: d = defaultdict(list)  

In [6]: for i, j, _ in nested_list: 
    ...:  d[i].append(j) 
    ...:  

In [7]: {k: list(combinations(v, 2)) for k, v in d.items()} 
Out[7]: {'a': [('b', 'f'), ('b', 'c'), ('f', 'c')], 'c': []}