【问题标题】:Nested list comprehension - python [duplicate]嵌套列表理解 - python [重复]
【发布时间】:2021-11-23 17:47:41
【问题描述】:

可能有一个相当简单的解决方案,但我似乎找不到它。

我有多个名字,我正在尝试合并:

dir_name = ['bseg', 'ekpo']
sys_name = ['a3p065', 'a3p100']
paths = [os.path.join(a, b) for a in (os.path.join(os.getcwd(), name) for name in sys_name) for b in dir_name]

paths 给我:

['C:path\\a3p065\\bseg', 'C:path\\a3p065\\ekpo', 'C:path\\a3p100\\bseg', 'C:path\\a3p100\\ekpo']

但是我需要这样的格式:

[['C:path\\a3p065\\bseg', 'C:path\\a3p065\\ekpo'], ['C:path\\a3p100\\bseg', 'C:path\\a3p100\\ekpo']]

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    这样的? (我使用"." 作为根路径,但请随意使用os.getcwd()。)

    import os
    
    dir_names = ["bseg", "ekpo"]
    sys_names = ["a3p065", "a3p100"]
    localized_sys_names = [os.path.join(".", name) for name in sys_names]
    paths = [
        [os.path.join(sys_name, dir_name) for sys_name in sys_names]
        for dir_name in dir_names
    ]
    
    print(paths)
    

    输出:

    [['a3p065/bseg', 'a3p100/bseg'], ['a3p065/ekpo', 'a3p100/ekpo']]
    

    【讨论】:

      【解决方案2】:

      您实际上没有嵌套列表理解;你有两个迭代器的单一理解。

      比较

      [x for y in z for x in y]  # One comprehension, two iterators
      

      [[x for x in y] for y in z]  # Two comprehensions, each with a single iterator
      

      对于您的情况,您需要以后者为模型:

      dir_name = ['bseg', 'ekpo']
      sys_name = ['a3p065', 'a3p100']
      
      
      paths = [[os.path.join(os.getcwd(), s, d) for d in dir_name] for s in sys_name]
      

      【讨论】:

        【解决方案3】:

        列表的嵌套需要嵌套的列表推导。一个迭代dir_names,另一个迭代sys_names。试试这个:

        dir_name = ['bseg', 'ekpo']
        sys_name = ['a3p065', 'a3p100']
        paths = [[os.path.join(a, b) for a in (os.path.join(os.getcwd(), name) for name in sys_name)] for b in dir_name]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-23
          • 2021-02-13
          • 2014-11-18
          相关资源
          最近更新 更多