我需要一个python函数(一个创建函数的函数),该函数为长度为N的列表创建所有循环排列运算符。
对于python列表a(例如a = [1, 2, 3, 4,5,6], N= 6
),可以定义一个函数
def cyclic_perm(a):
n = len(a)
b = [[a[i - j] for i in range(n)] for j in range(n)]
return b
这样就可以为列表提供所有可能的循环排列,在这种情况下为6个列表。
我希望函数不给我列表,而是(在这种情况下)6个运算符,当应用于该列表时,每个运算符都给出一个排列的列表。
我不太确定此练习的目标是什么,但是您可以使用部分功能来实现。
from functools import partial
def reorder_from_idx(idx, a):
return a[idx:] + a[:idx]
def cyclic_perm(a):
return [partial(reorder_from_idx, i) for i in range(len(a))]
a = [1, 2, 3, 4, 5, 6]
result = cyclic_perm(a)
print(result)
#[functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 0),
# functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 1),
# functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 2),
# functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 3),
# functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 4),
# functools.partial(<function reorder_from_idx at 0x00000298D92189D8>, 5)]
result[3](a)
#[4, 5, 6, 1, 2, 3]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句