Как проверить порядок номеров в списке с другим списком? - PullRequest
2 голосов
/ 14 июня 2019

У меня есть список с приведенными ниже значениями в порядке возрастания.

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 Ответ

2 голосов
/ 14 июня 2019

Вы можете создавать соседние кортежи из ваших исходных данных и проверять, есть ли какой-либо кортеж из вашей перестановки в списке вашего оригинала - только если нет: добавить к результату:

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

Документация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...