我有一个以['0',.....,'10']
等字符串形式给出的序列列表。当我使用itertools.combinations
获取('0','2')
等2的组合时,我注意到'10'
并未计入单个实体。即我没有看到('2','10')
,而是看到('2','1','0')
或与10
的任意组合。它被视为1,0
,然后组合正在形成。我很感激为此解决了问题。我确实考虑过将格式转换为int,但我想在形成长度为2的组合后继续形成更大的组合,例如(1,2,3)
。
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
如上所述,问题在于cell =元组(set(i [0] + i [1]))行。你看到了解决方法吗?该行的目的是创建长度大于2的组合。
答案 0 :(得分:2)
itertools.combinations
正常运作。您正在使用cell = tuple(set(i[0]+i[1]))
分解结果。这会添加两个字符串(例如'910'
)然后分解数字。对于此示例,i
具有正确的结果{。{1}}。
答案 1 :(得分:1)
不确定您是否正确使用它。我假设你正在尝试按照
的方式行事<?php if(mysqli_num_rows($result)!= 0): ?>
<?php while($row = mysqli_fetch_assoc($result)): ?>
<center><b><p>Order ID: <?php echo $row['ID'] ?></p></b></center><br>
<center><b><p>Order Total: <?php echo $row['total'] ?></p></b></center><br>
<? endwhile;
mysqli_close($conn);
endif; ?>
在这种情况下,字符串'10'不会分成'1'和'0'。输出将有55个值,包括('0','10'),('1','10')......('9','10')