2010-08-09 2 views
1

Я хочу создать путь к файлам из списка.Создать имя файла пути из списка

pathList = [['~/workspace'], ['test'], ['*'], ['*A', '*2'], ['*Z?', '*1??'], ['*'], ['*'], ['*'], ['*.*']] 

и я хочу

[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*']] 

[['', '~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*']] 

Я пытаюсь создать его из цикла, но я получаю

[['', '~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*', '*2', '*Z?', '*', '*', '*', '*.*', '*1??', '*', '*', '*', '*.*']] 

Как я могу сделать? Пожалуйста, помогите мне.

спасибо.

+0

itertools.product, это работает. Большое вам спасибо за помощь. – Walapa

ответ

1

В Python 2.6 или более поздней версии вы можете использовать itertools.product:

import itertools 
for x in itertools.product(*pathList): 
    print x 
1

Я не уверен, что понял вопрос, но я думаю, что вы хотите itertools.product:

print(list(itertools.product(*pathList))) 
>>> [('~/workspace', 'test', '*', '*A', '*Z?', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*A', '*1??', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*2', '*Z?', '*', '*', '*', '*.*'), 
    ('~/workspace', 'test', '*', '*2', '*1??', '*', '*', '*', '*.*')] 

Этот выход все возможные пути , взяв один элемент из каждого вложенного списка.

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??/*/*/*/*.*'] 

и вот версия с использованием itertools.starmap

>>> 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??/*/*/*/*.*'] 
Смежные вопросы