替代Python中的嵌套for循环

时间:2018-04-15 22:10:09

标签: python performance for-loop nested

我正在处理实体列表的笛卡尔积。

For e.g. a_list = ['a','b']

预期输出为:

"a";"a"&"a";"b"&"b";"a"&"b";"b"

实体对中的每个实体用分号“;”分隔并且每个enitity对由“&”分隔。

我使用了以下嵌套for循环来实现输出。

entity_set = ['a','b']

domain_text = ''
count = 0
for entity1 in entity_set:
    for entity2 in entity_set:
        count += 1
        domain_text += '"' + entity1 + '"' + ';' + '"' + entity2 + '"'
        if count < (len(entity_set)*len(entity_set)):
            domain_text += '&'
print domain_text

然而,随着a_list的大小增加到数千个实体,该过程变得太慢。

是否有可以替代使用的优雅解决方案?

1 个答案:

答案 0 :(得分:3)

不确定。 itertools.product()可以为您完成产品,然后字符串连接操作可以有效地粘贴所有部分(这比树懒的真实来源更可能:逐步构建结果每次串一小块。)

from itertools import product
entity_set = ['a', 'b']
result = "&".join('"%s";"%s"' % pair
                  for pair in product(entity_set, repeat=2))

然后result打印为

"a";"a"&"a";"b"&"b";"a"&"b";"b"