질문을 올바르게 이해하면 일련의 중복 된 값을 찾을 수있을뿐만 아니라 일련의 값을 찾아야합니다. 예를 들어 [1,2,3,4]
일 경우 [39,87,2,3,4]
에서 [2,3,4]
의 사본을 찾을 수 있습니다.
수입 및 테스트 값
import itertools,pprint
from collections import defaultdict
l = ((1, 2, 3, 4, 5),
(6, 7, 8, 9, 10),
(11, 12, 13, 14, 15),
(16, 17, 18, 19, 20),
(21, 22, 23, 24, 25),
(26, 8, 9, 29, 30),
(31, 13, 14, 15, 35),
(17, 18, 19, 39, 40),
(41, 23, 24, 44, 45),
(46, 47, 48, 49, 50))
홈페이지 코드 :
seen = defaultdict(dict)
for y,row in enumerate(l):
rowlen = len(row)
values = [ [ (row[i:k+1]) for (i,k) in zip(range(rowlen),range(e,rowlen,1))] for e in range(rowlen) ]
for valueGroup in values:
for x,value in enumerate(valueGroup):
seen[value]['count'] = seen[value].get('count',0) + 1
seen[value]['x-coOrd'] = x
seen[("R",y)][value] = True
for y in range(len(l)):
my_rows_vals = seen[("R",y)].keys()
for value in my_rows_vals:
if seen[value]['count'] > 1:
print "{0} repeated at ({1},{2})".format(value,seen[value]['x-coOrd'],y)
윌 출력, 샘플로 (이상의 출력이 있었다) : 목록의 이해 논리였다
(13, 14) repeated at (1,6)
(14, 15) repeated at (2,6)
(13,) repeated at (1,6)
(13, 14, 15) repeated at (1,6)
(14,) repeated at (2,6)
(17, 18) repeated at (0,7)
(18, 19) repeated at (1,7)
(17,) repeated at (0,7)
(18,) repeated at (1,7)
(19,) repeated at (2,7)
(17, 18, 19) repeated at (0,7)
(23,) repeated at (1,8)
(24,) repeated at (2,8)
(23, 24) repeated at (1,8)
이 예를 근거로 추론 한 것
l = [1,2,3,4]
len = 4
i:k
0:1 1:2 2:3 3:4 i = 0,1,2,len-e k = e,e+1,e+2,e+3 e = 0
0:2 1:3 2:4 i = 0,1,len-e k = e,e+1,e+2 e = 1
0:3 1:4 i = 0,len-e k = e,e+1 e = 2
0:4 i = len-e k = e e = 3
이 방법은 숫자와 숫자로 구성된 시퀀스을 모두 확인하고 일치하는 부분을 강조 표시하므로 다른 답변과 다릅니다.
반복되는 항목이 여러 개인 경우 좌표가 있으면이 기능이 작동합니까? –
@RyanSaxe 사전 키는 좌표 쌍이므로 전체 배열이 동일한 값으로 채워질 수 있고 첫 번째 이후의 각 좌표 쌍을 속량 사전의 별도 항목으로 저장합니다. –