어제 질문을했고 팀 피터스 덕분에 해결되었습니다. 질문은 여기에있다.itertools.product 반전 된 튜플 반복 제거
itertools.product eliminating repeated elements
새로운 질문이 더 버전입니다. 이번에는 튜플 내부에 튜플을 생성 해 보겠습니다. 다음은 그 예입니다. itertools.product이 내가 무엇을 얻을 기능에 내가 그것을 사용
lis = [[(1,2), (3,4)], [(5,2), (1,2)], [(2,1), (1,2)]]
, 나는 방법을 변경하려면
((1, 2), (5, 2), (2, 1))
((1, 2), (5, 2), (1, 2))
((1, 2), (1, 2), (2, 1))
((1, 2), (1, 2), (1, 2))
((3, 4), (5, 2), (2, 1))
((3, 4), (5, 2), (1, 2))
((3, 4), (1, 2), (2, 1))
((3, 4), (1, 2), (1, 2))
그 시퀀스는 그 안에 (A, B)이있는 경우 , (b, a)를 가질 수 없다. 이 예제에서이 시퀀스를 보면 ((3, 4), (1, 2), (2, 1))
안에 (1,2)와 (2,1)이 있습니다. 따라서이 시퀀스 ((3, 4), (1, 2), (2, 1))
은 결과로 고려되어서는 안됩니다.
내가 말했듯이 이전에 비슷한 질문을했는데,이 경우 중복 요소를 고려하지 않았습니다. 나는 내 문제에 적응하려고 노력한다. 수정 된 코드입니다. 이전 버전에서 변경된 부분은 주석에 사용됩니다.
def reverse_seq(seq):
s = []
for i in range(len(seq)):
s.append(seq[-i-1])
return tuple(s)
def uprod(*seqs):
def inner(i):
if i == n:
yield tuple(result)
return
for elt in sets[i] - reverse:
#seen.add(elt)
rvrs = reverse_seq(elt)
reverse.add(rvrs)
result[i] = elt
for t in inner(i+1):
yield t
#seen.remove(elt)
reverse.remove(rvrs)
sets = [set(seq) for seq in seqs]
n = len(sets)
#seen = set()
reverse = set()
result = [None] * n
for t in inner(0):
yield t
내 의견으로는이 코드는 작동해야하지만 입력은 lis = [[(1,2), (3,4)], [(5,2), (1,2)], [(2,1), (1,2)]]
입니다. 내가 어디 잘못되었는지 이해할 수 없었다. 세트를 사용하여 내가 조금 다르게하고있어 출력이
for i in uprod(*lis):
print i
,
((1, 2), (1, 2), (1, 2))
Traceback (most recent call last):
File "D:\Users\SUUSER\workspace tree\sequence_covering _array\denemeler_buraya.py", line 39, in <module>
for i in uprod(*lis):
File "D:\Users\SUUSER\workspace tree\sequence_covering _array\denemeler_buraya.py", line 32, in uprod
for t in inner(0):
File "D:\Users\SUUSER\workspace tree\sequence_covering _array\denemeler_buraya.py", line 22, in inner
for t in inner(i+1):
File "D:\Users\SUUSER\workspace tree\sequence_covering _array\denemeler_buraya.py", line 25, in inner
reverse.remove(rvrs)
KeyError: (2, 1)
감사합니다,
실제 오류가 있습니까? 그렇다면 오류 메시지를 게시 할 수 있습니까? – rlms
게시물에 오류 메시지를 추가했습니다. – genclik27