python中嵌套for循环的替代方法

阿尼什

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

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

预期的输出是:

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

实体对中的每个实体都用分号“;”隔开 每个实体对以“&”分隔。

我使用以下嵌套的 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 的大小增加到数千个实体,该过程变得太慢。

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

蒂姆·彼得斯

当然。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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章