我想从列表中创建文件路径。
pathList = [['~/workspace'], ['test'], ['*'], ['*A', '*2'], ['*Z?', '*1??'], ['*'], ['*'], ['*'], ['*.*']]
我想要
[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*']]
[['', '~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*']]
[['', '~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*']]
[['', '~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*']]
我尝试从for循环创建它,但我得到了
[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*', '*2', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*']]
我该怎么办?请帮帮我。
谢谢。
答案 0 :(得分:2)
预测下一步 - 您可以创建这样的路径
>>> import os, itertools
>>> [os.path.join(*x) for x in itertools.product(*pathList)]
['~/workspace/test/*/*A/*Z?/*/*/*/*.*',
'~/workspace/test/*/*A/*1??/*/*/*/*.*',
'~/workspace/test/*/*2/*Z?/*/*/*/*.*',
'~/workspace/test/*/*2/*1??/*/*/*/*.*']
的版本
>>> from itertools import starmap
>>> starmap(os.path.join, itertools.product(*pathList))
<itertools.starmap object at 0xb77d948c>
>>> list(_)
['~/workspace/test/*/*A/*Z?/*/*/*/*.*',
'~/workspace/test/*/*A/*1??/*/*/*/*.*',
'~/workspace/test/*/*2/*Z?/*/*/*/*.*',
'~/workspace/test/*/*2/*1??/*/*/*/*.*']
答案 1 :(得分:1)
在Python 2.6或更高版本中,您可以使用itertools.product
:
import itertools
for x in itertools.product(*pathList):
print x
答案 2 :(得分:1)
我不确定我理解这个问题,但我认为你想要itertools.product
:
print( list( itertools.product( *pathList ) ) )
>>> [('~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*'),
('~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*'),
('~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*'),
('~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*')]
这会产生所有可能的路径,从每个嵌套列表中取一个元素。