Я обрабатываю декартово произведение списка сущностей.
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 увеличивается до тысяч объектов.
Есть ли какие-нибудь изящные решения, которые можно использовать в качестве альтернативы?
это очень близко к stackoverflow.com/questions/533905/…. Используйте itertools.product для создания списков, затем добавьте шаг объединения каждого списка с его символами. Следует отметить как дубликат?






Конечно. 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"
Вы в основном заново реализовали
itertools.product(entity_set, repeat=2). Вы получите небольшой прирост производительности при использовании f-строк, но он все равно будет O (n ** 2).