Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中创建所有可能的组合_Python_Algorithm_List - Fatal编程技术网

Python 从列表中创建所有可能的组合

Python 从列表中创建所有可能的组合,python,algorithm,list,Python,Algorithm,List,我有一张单子 [ [[[u'ANC'], [u'DEN', u'SFO'], [u'CHI', u'CLE', u'DEN', u'EWR', u'HOU', u'WAS'], [u'GSP']]], [[[u'ANC'], [u'PDX', u'SEA'], [u'CHI', u'CLE', u'DEN', u'EWR', u'HOU', u'LAX', u'SFO', u'WAS'], [u'GSP']]] ] 已从此文本创建列表 ANC-DEN/SFO-CHI/CLE/DEN/EW

我有一张单子

[
 [[[u'ANC'], [u'DEN', u'SFO'], [u'CHI', u'CLE', u'DEN', u'EWR', u'HOU', u'WAS'], [u'GSP']]], 
 [[[u'ANC'], [u'PDX', u'SEA'], [u'CHI', u'CLE', u'DEN', u'EWR', u'HOU', u'LAX', u'SFO', u'WAS'], [u'GSP']]]
]
已从此文本创建列表

ANC-DEN/SFO-CHI/CLE/DEN/EWR/HOU/WAS-GSP
ANC-PDX/SEA-CHI/CLE/DEN/EWR/HOU/LAX/SFO/WAS-GSP
我需要获得使用该列表可以完成的所有变体:

ANC-SFO-EWR-GSP
ANC-SFO-CHI-GSP
ANC-SFO-CLE-GSP
ANC-DEN-EWR-GSP
ANC-PDX-EWR-GSP
ANC-SFO-HOU-GSP
ANC-SEA-LAX-GSP
ANC-SEA-EWR-GSP
ANC-SFO-ORD-GSP
ANC-PDX-LAX-GSP
ANC-PDX-CHI-GSP
ANC-DEN-CHI-GSP
ANC-SEA-SFO-GSP
ANC-PDX-SFO-GSP
ANC-SEA-CHI-GSP
ANC-SFO-DEN-GSP
ANC-PDX-HOU-GSP
ANC-SEA-HOU-GSP
ANC-DEN-HOU-GSP
ANC-DEN-CLE-GSP
ANC-PDX-CLE-GSP
ANC-SEA-CLE-GSP
ANC-DEN-ORD-GSP
ANC-PDX-ORD-GSP
ANC-PDX-DEN-GSP
ANC-SEA-DEN-GSP
ANC-SEA-ORD-GSP

我该怎么做呢?

使用
itertools.product
并将列表展开为参数:

>>> import itertools
>>> test = [['a'], ['b', 'c'], ['d']]
>>> list(itertools.product(*test))
    [('a', 'b', 'd'), ('a', 'c', 'd')]
在你的情况下,应该是这样的:

for row in data:
    for item in itertools.product(*row[0]):
        print '-'.join(item)

我在mainhugeeveryarray中为a1尝试了这个
:为a1中的a2打印'++':为a2中的a3:为a3中的a4:print mainhugeeveryarray[j1][j2][j3][j3][j4]j4=j4+1 j3=j3+1 j4=0 j2=j2+1 j3=0 j4=0;打印'++'j1=j1+1 j2=0 j3=0 j4=0
@8am:供将来参考,不要试图在注释中编写多行代码。要么把它贴到pastebin.com之类的地方,然后在这里发布一个URL,要么编辑这个问题。它们看起来几乎像机场代码…@JonClements:事实上,它们看起来和机场代码一模一样。其中大多数是国家或地区枢纽的国际机场(除了CHI而不是ORD,WAS而不是BWI/DCA/IAD,GSP而不是…卡罗莱纳州该地区的大型机场)。显然,许多旅游系统使用像“CHI”和“WAS”这样的几个名字作为“地铁代码”,因为它们不需要处理实际的小型本地CHI机场,而且根本没有WAS,所以…@8am:据我记忆,机场代码比保险代码和销售点代码更有趣,但几乎没有。至少您可以用Python编写它。回到我的时代,我们不得不在雪地里,上坡,穿着PL/SQL过程和C制成的鞋子。事实上,看起来他想要的东西像
(itertools.product(*row[0])表示数据中的行)
。他有两个列表,每一个列表都是一堆列表,而不仅仅是一个列表,一个列表,一个列表,一个列表(正如我最初认为的,以及你的答案所假设的)。但基本原理仍然完全正确。或者,把它们放在一起:
['-'.join(prod)for row in data for col in row for prod in itertools.product(*col)]
。(名称
显然假定它是某种事物列表,但不管它实际上是什么,除了排序之外,输出与OP要求的完全一致。)虽然我可能会用更多的工具来写它。将展平,以消除理解中对s的两级嵌套的,这将首先消除猜测正确名称的需要……Blender和@abarnert:非常感谢。编辑后的代码版本效果很好(我只检查路由列表是否唯一)@上午8点:你知道如何检查它们是否独特吗?(对于这么小的东西,如果顺序不重要,
list(set(x))
就足够了。否则,请查看
itertools
文档中的食谱。)@abarnert,谢谢你的提示。我只学习了几天python(有几年的php经验,但仍在继续)。谢谢