2017-11-10 10 views
-2

['0',.....,'10']과 같이 문자열로 주어진 시퀀스 목록이 있습니다. itertools.combinations을 사용하여 ('0','2')과 같은 2의 조합을 얻으면 '10'이 단일 항목으로 계산되지 않는다는 것을 알았습니다. 나는. ('2','10')이 표시되지 않으며 대신 ('2','1','0') 또는 10과의 조합이 표시됩니다. 1,0으로 간주되고 조합이 형성됩니다. 이 문제를 해결해 주셔서 감사합니다. 형식을 int로 변환하는 것을 고려했지만 길이 2 조합을 형성 한 후에 (1,2,3)과 같은 더 큰 조합을 계속 형성하려고합니다.'10 'itertools 조합을 사용할 때 문자열이 1,0로 나뉘어집니다.

def frequentPattern(data, minsup): 
    frequentSets = [] 
    itemset = {} 


    for line in data: 
     for c in line.replace(',','').split(): 

      if itemset.get(c)==None: 
       itemset[c]=0 
      itemset[c]+=1 

    k = 1 
    while itemset != {}: 
     prevCandidates = [] 
     print itemset.keys() 
     for i in itemset.keys(): 
      print i 
      if itemset[i] >= minsup: 
       prevCandidates.append(i) 
       if i not in frequentSets: 
        frequentSets.append(i) 

     candidates = [] 
     for i in itertools.combinations(prevCandidates,2): 
      cell = tuple(set(i[0]+i[1])) 
      #print cell 
      #cell = tuple(sorted(cell)) 
      if len(cell)<=(k+1): 
       candidates.append(cell) 
     candidates = list(set(candidates)) 

     itemset = {} 
     for line in data: 
      for cell in candidates: 
       if set(cell) <= set(tuple(line.replace(',','').split())): 
        if itemset.get(cell)==None: 
         itemset[cell]=0 
        itemset[cell]+=1 

     k = k+1 
    return frequentSets 

로서는 문제가 셀 = 튜플 (SET (I [0] + I [1])) 라인으로 언급했다. 주위에 방법이 보이니? 이 선의 목적은 길이가 2보다 큰 조합을 만드는 것이 었습니다.

+1

공유 할 수 있다면 유용 할 것입니다. 실제로 가지고있는 코드 – oScarDiAnno

+0

이 문제를 재현 할 수 없습니다. 'list ((8,11)에서 x에 대해 str (x)를 사용하면, 2))'는'[('8 ','9 '), ('8 ', '10 '), ('9 ','10 ')]' – James

+0

이미지 올리기가 좋지 않습니다. 우리는 그것을 다시 시도해야합니까? 컷 앤 페이스트! –

답변

2

itertools.combinations이 올바르게 작동하는 것입니다. cell = tuple(set(i[0]+i[1]))으로 결과를 분할합니다. 2 개의 문자열 (예 : '910')을 추가하면 숫자가 구분됩니다. i의 올바른 결과는 ('9','10')입니다.

+0

감사! 그것은 그것을 고쳤다. –

1

올바르게 사용하고 있는지 확실하지 않습니다.

from itertools import combinations 

a = [str(i) for i in range(11)] 
print(list(combinations(a, 2))) 

이 경우, 문자열 '10'은 '1'과 '0'으로 분리되지 않습니다. 출력에는 ('0', '10'), ('1', '10') ... ('9', '10')을 포함한 55 개의 값이 있습니다.

+0

이 답변이 왜 실패했는지 확실하지 않으므로 솔루션이 좋아 보인다! – alfasin