【问题标题】:Iterate over two lists and combining items遍历两个列表并组合项目
【发布时间】:2017-03-03 18:10:26
【问题描述】:

我想迭代并合并两个列表中的项目。但它必须从列表 1 中的项目 1 开始,并遍历并与列表 2 中的所有项目组合。

partner_paths = ["/partner/path/1", "/partner/path/2", "/partner/path/3"]
scr_dirs = ["/dir1", "/dir2", "/dir3"]

for p_path, s_dir in zip(partner_paths, scr_dirs):
    fpath = p_path + s_dir
    print fpath

我想要的是:

"/partner/path/1/dir1" “/合作伙伴/路径/1/dir2” "/partner/path/1/dir3"

"/partner/path/2/dir1" “/合作伙伴/路径/2/dir2” "/partner/path/2/dir3"

"/partner/path/3/dir1" “/合作伙伴/路径/3/dir2” "/partner/path/3/dir3"

【问题讨论】:

  • src_dirs 应该是 ["/dir1", "/dir2", "/dir3"] 吗?
  • 是的,抱歉已更正
  • 那么你不需要 zip,你需要一个嵌套的 for 循环。

标签: python list iteration


【解决方案1】:

for 循环是不可能的吗?

for p_path in partner_paths:
    for s_dir in scr_dirs:
       fpath = p_path + s_dir
       print fpath

【讨论】:

    【解决方案2】:

    如果您需要列表中的结果,您可以将itertools.product 与列表推导一起使用:

    from itertools import product
    [d + f for d, f in product(partner_paths, scr_dirs)]
    
    #['/partner/path/1/dir1',
    # '/partner/path/1/dir2',
    # '/partner/path/1/dir3',
    # '/partner/path/2/dir1',
    # '/partner/path/2/dir2',
    # '/partner/path/2/dir3',
    # '/partner/path/3/dir1',
    # '/partner/path/3/dir2',
    # '/partner/path/3/dir3']
    

    或者正如@vaultah 建议的那样,这也应该有效:

    [p + d for p in partner_paths for d in scr_dirs]
    

    【讨论】:

    • ... 或者只是在列表推导中添加一个额外的循环。
    【解决方案3】:

    如果您想要 2D 输出,此代码也应该可以工作:

    final_output = []
    for p_path in partner_paths:
      paths = []
      for s_dir in scr_dirs:
        fpath = p_path + s_dir
        paths.append(fpath)
      output_list.append(paths)
    
    print (final_output)
    

    【讨论】:

      【解决方案4】:
      partner_paths = ["/partner/path/1", "/partner/path/2", "/partner/path/3"]
      scr_dirs = ["/dir1", "/dir2", "/dir3"]
      fpath = []
      for p_path in partner_paths:
          for s_dir in scr_dirs:
              fpath.append(p_path + s_dir)
      
      print(fpath)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2010-12-12
        相关资源
        最近更新 更多