#python #permutation
#python #перестановка
Вопрос:
Важной частью моего вывода является возможность определить длину finalList
, но где-то в моем коде дубликаты удаляются, и я не могу понять, где
from itertools import chain, permutations
allPos = []
first_list = ['a','b','c']
match_list = [['a','b','c'], ['a','b','c']]
for i in range(1,30):
for phrase in permutations(first_list, i):
for ind, letter in enumerate(chain.from_iterable(phrase)):
if ind >= len(match_list) or letter not in match_list[ind]:
break
else:
allPos.append(phrase)
finalList = []
for i in allPos:
if len(i) == len(allPos[-1]):
finalList.append(i)
print(finalList)
ВЫВОД
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
Я знаю, что он удаляет дубликаты, или, возможно, в моем коде просто чего-то не хватает, потому что я пропускаю [('a','a'), ('b','b'), ('c','c')]
свой вывод
Комментарии:
1. Здесь:
permutations
?2. должен ли ваш блок else иметь отступ?
3. Я прочитал документы @zvone
4. да, предполагается, что он должен иметь отступ @kpie
5. Я хотел сказать, что функция
permutations
не возвращает дубликаты.
Ответ №1:
Вы можете попробовать с этим. Изменение iterable
с помощью перестановок.
from itertools import chain, permutations
...
...
for i in range(1,30):
# change iterable
for phrase in permutations([j for ele in match_list for j in ele], i):
...
for i in set(allPos):
if len(i) == len(allPos[-1]):
finalList.append(i)
print (sorted(finalList))
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]