我正在处理实体列表的笛卡尔积。
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] 删除。
我来说两句