如何查看其他列表中数字的顺序?

时间:2019-06-14 15:36:36

标签: python list permutation

我有一个列表,其中以下值按升序排列。

  

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))

我收到类型错误。如何解决此问题以及如果声明

1 个答案:

答案 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)]

文档: