【问题标题】:Create name of path files from list从列表中创建路径文件的名称
【发布时间】:2010-08-09 09:26:55
【问题描述】:

我想从列表中创建文件路径。

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

我该怎么办?请帮帮我。

谢谢。

【问题讨论】:

  • itertools.product,它工作。非常感谢您的帮助。

标签: python loops list


【解决方案1】:

期待下一步 - 您可以创建这样的路径

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

【讨论】:

    【解决方案2】:

    在 Python 2.6 或更高版本中,您可以使用itertools.product

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

    【讨论】:

      【解决方案3】:

      我不确定我是否理解这个问题,但我想你想要itertools.product

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

      这会产生所有可能的路径,从每个嵌套列表中获取一个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2019-09-07
        相关资源
        最近更新 更多