分解 python 个过程

Break down python process

我想尝试从我从 apriori using python 下载的先验算法中分解一些行代码,因为当我尝试计算巨大的数据集时它会给我的内存错误。 这是我刚发现的一些问题。

def joinSet(itemSet, length):
        """Join a set with itself and returns the n-element itemsets"""
        return set([i.union(j) for i in itemSet for j in itemSet if len(i.union(j)) == length])

我想知道触发错误时 return var 的实际大小,所以我尝试将这些代码分解为这个。

def joinSet(itemSet, length):
    """Join a set with itself and returns the n-element itemsets"""
    ret = []
    for i in itemSet:
        for j in itemSet:
            if len(i.union(j)) == length:
                ret.append(i.union(j))
    return ret

所以我可以监控每一步,但我的分解代码给出的结果与原来的不一样。

我到底想念什么? 如果我的方法出错,如果你能给我实际的解决方案,我也会非常感激。 谢谢你。

我觉得可能是原来returns一个集合,而你返回的是一个列表

def joinSet(itemSet, length):
    """Join a set with itself and returns the n-element itemsets"""
    ret = []
    for i in itemSet:
        for j in itemSet:
            if len(i.union(j)) == length:
                ret.append(i.union(j))
    return set(ret)

此外,我认为您可以通过对原始文件进行以下编辑来节省大量内存:

def joinSet(itemSet, length):
        """Join a set with itself and returns the n-element itemsets"""
        return {i.union(j) for i in itemSet for j in itemSet if len(i.union(j)) == length}

这是一个集理解要求python >= 2.7