У меня есть следующие реализации для генерации перестановок в Python:быстрого внедрения Перестановки в Python
def perms(v):
'''
Generates permutations for sequence v
:param v: sequence for permutations
'''
if not v:
yield()
else:
for p in perms(v[1:]):
for i in range(len(v)):
yield p[:i] + (v[0],) + p[i:]
Он работает быстрее, чем itertools.permutations (это также делает менее, я знаю). Существует ли более быстрая (или, альтернативно, более компактная) реализация. Я попытался реализовать его с помощью vector insert/delete, и он выглядит медленнее.
's/iterable/sequence/g' – delnan
Согласовано. Но это не делает его быстрее ... :-) – Telek
Вместо нарезания 'v' вы можете использовать индекс начала. Это должно избегать выделения памяти, которое может немного помочь функциям. – Bakuriu