我正在处理实体列表的笛卡尔积。
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的大小增加到数千个实体,该过程变得太慢。
是否有可以替代使用的优雅解决方案?
答案 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"