python中嵌套for循环的替代方法
我正在处理实体列表的笛卡尔乘积python中嵌套for循环的替代方法,python,performance,for-loop,nested,Python,Performance,For Loop,Nested,我正在处理实体列表的笛卡尔乘积 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_s
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
entity_set=['a','b']
域_文本=“”
计数=0
对于实体集合中的实体1:
对于实体集合中的实体2:
计数+=1
域文本+=''''''''+entity1+''''+';'+'“'+entity2+'”
如果计数<(len(实体集合)*len(实体集合)):
域_text+='&'
打印域文本
但是,随着_列表的大小增加到数千个实体,过程变得太慢
For e.g. a_list = ['a','b']
有什么优雅的解决方案可以替代使用吗?当然可以
itertools.product()
可以为您生成产品,然后字符串连接操作可以有效地将所有片段粘贴在一起(这很可能是懒惰的真正根源:一次递增地构建一个小片段的结果字符串)
然后,结果
打印为
"a";"a"&"a";"b"&"b";"a"&"b";"b"
您基本上已经重新实现了
itertools.product(entity\u set,repeat=2)
。通过使用f字符串,您将获得轻微的性能提升,但仍然是O(n**2)。这非常接近。使用itertools.product生成列表,然后添加将每个列表与其符号进行连接的步骤。是否应标记为重复?