Ich habe eine Liste von Sequenzen, die als Strings angegeben sind, wie ['0',.....,'10']
. Wenn ich itertools.combinations
verwende, um eine Kombination von 2s wie ('0','2')
zu erhalten, bemerke ich, dass die '10'
nicht als eine einzelne Entität gezählt wird. I.e. Ich sehe keine ('2','10')
, stattdessen sehe ich eine ('2','1','0')
oder eine beliebige Kombination mit 10
. Es wird als 1,0
betrachtet und dann werden die Kombinationen gebildet. Ich würde mich über eine Lösung dafür freuen. Ich habe darüber nachgedacht, das Format in int umzuwandeln, aber ich möchte nach der Bildung von Länge 2-Kombinationen immer größere Kombinationen wie (1,2,3)
bilden.'10' Eine Zeichenfolge wird in 1,0 aufgeteilt, wenn itertools-Kombinationen verwendet werden
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
Wie erwähnt ist das Problem mit der Zelle = tuple (set (i [0] + i [1])) wurde Linie. Siehst du einen Weg um ihn herum? Das Ziel dieser Linie war, Kombinationen von Länge größer als 2 zu erstellen.
Es wäre nützlich, wenn Sie teilen könnten der Code, den Sie tatsächlich haben – oScarDiAnno
Ich kann dieses Problem nicht replizieren. Mit 'list (combinations ([str (x) für x im Bereich (8,11)], 2)) ergibt sich das erwartete Ergebnis von [[('8', '9'), ('8', '10 '), (' 9 ',' 10 ')] ' – James
Das Posten eines Bildes ist schlecht juju. Sollen wir es erneut eingeben, um es zu versuchen ??? cut-n-paste! –