我有一个列表,其中以下值按升序排列。
l1 = [1,3,9]
有6个可能的排列,每个排列的长度为l1。
(1, 3, 9)
(1, 9, 3)
(3, 1, 9)
(3, 9, 1)
(9, 1, 3)
(9, 3, 1)
我需要删除所有遵循l1顺序的排列。
[1,3,9] 1,3匹配l1中的顺序。
[9,1,3] 1,3匹配l1中的顺序。
[3,9,1] 3,9匹配l1中的顺序。
答案应为6-3 = 3 Mycode:
from itertools import permutations
l = [1,3,9]
perm = permutations(l, len(l))
res = []
for i in list(perm):
res.append(i)
for i in res:
for j in range(0,len(i)):
if i[j] and i[j+1] in l[j]:
res.remove(i)
print(len(res))
我收到类型错误。如何解决此问题以及如果声明
答案 0 :(得分:2)
您可以根据原始数据创建邻居元组,并检查排列中是否有任何元组-仅在以下情况下:添加到结果中:
from itertools import permutations
l = [1,3,9]
# create all neighbor-tuples
tups = set(zip(l,l[1:]))
perm = list(permutations(l, len(l)))
print("perm: ", perm)
res = []
print("tups: ", list(tups))
for i in perm:
itups = zip(i,i[1:]) # create neighbor tuples from this permutation
if any( t in tups for t in itups):
continue
res.append(i)
print(len(res))
print(res)
输出:
perm: [(1, 3, 9), (1, 9, 3), (3, 1, 9), (3, 9, 1), (9, 1, 3), (9, 3, 1)]
tups: [(3, 9), (1, 3)]
3
[(1, 9, 3), (3, 1, 9), (9, 3, 1)]
文档: