【问题标题】:How to merge list to get the mentioned output below?如何合并列表以获得下面提到的输出?
【发布时间】:2021-03-16 17:14:27
【问题描述】:

我有以下代码:

import itertools

host = ["computer1", "computer2"]

variants = [".some.domain.com", ".another.domain.com"]

for host in host:

    merged_list = "\n".join([host + variants_index for variants_index in variants])

    merged_list = merged_list.split()

    united = list(itertools.chain(merged_list))

    print(united)

但我想要以下输出: ['computer1.some.domain.com', 'computer1.another.domain.com', 'computer2.some.domain.com', 'computer2.another.domain.com']

我现在的情况是这样的:

['computer1.some.domain.com', 'computer1.another.domain.com']

['computer2.some.domain.com', 'computer2.another.domain.com']

如何将它们合并在一起?

【问题讨论】:

    标签: python list itertools


    【解决方案1】:

    使用 itertools 产品

    from itertools import product
    
    result = [a+b for a, b in product(host, variants)]
    
    #result: ['computer1.some.domain.com', 'computer1.another.domain.com', 'computer2.some.domain.com', 'computer2.another.domain.com']
    

    【讨论】:

    • 是的,这也有效 - itertools.product 大致相当于嵌套的 for 循环。文档指出,它必须完全消耗两个输入,所以我没有看到一个 strong 理由来选择一个而不是另一个,尽管简洁很重要。 productrepeat 关键字选项也是一个不错的选择。
    • @PeterDeGlopper——主要优势是自itertools implemented in c 以来较大阵列的速度。由于 Python 循环比 C 循环慢得多,所以 itertools 在更大的数组上胜出。
    • 谢谢大家!
    • 快速检查让我使用 timeit 比较一些 itertools 方法与嵌套列表的不同人的结果相互矛盾 - 看起来它可能取决于输入序列的大小。 stackoverflow.com/a/46584544/2337736 vs stackoverflow.com/a/37355093/2337736(仅大致相当于产品)。我可能想对预期数据进行分析,当然对于这个例子来说,这两种方法都足够快。
    • @PeterDeGlopper--顺便说一下,当使用列表推导而不是嵌套列表时,我得到的结果要快一些,即[host + variant for host in hosts for variant in variants]
    【解决方案2】:

    试试这个,你甚至不需要 itertools,正如 cmets 在另一个答案中指出的那样,它甚至更快(比 for 循环或 itertools.product

    united = [h + v for h in host for v in variants]
    

    【讨论】:

      【解决方案3】:

      我认为使用普通的嵌套 for 循环会更简单:

      united = []
      for host in hosts:
          for variant in variants:
              united.append(host + variant)
      

      您可以将其折叠为列表推导,但我发现嵌套列表推导通常比它们的价值更麻烦。尽管分析确实表明它们更快,尤其是在大输入时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多