' 10'当使用itertools组合时,字符串被分成1,0

时间:2017-11-10 03:35:40

标签: python string casting itertools

我有一个以['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的组合。

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')