代码之家  ›  专栏  ›  技术社区  ›  MarcelKlockman

生成给定条件的列表的所有组合

  •  1
  • MarcelKlockman  · 技术社区  · 6 年前

    我想为k个变量的列表生成长度n的所有组合。我可以这样做:

    import itertools
    import pandas as pd
    from sklearn import datasets
    
    dataset = datasets.load_breast_cancer()
    X = dataset.data
    y = dataset.target
    df = pd.DataFrame(X, columns=dataset.feature_names)
    features = dataset.feature_names
    
    x = set(['mean radius', 'mean texture'])
    
    for s in itertools.combinations(features, 3):
        if x.issubset(set(s)):
            print s
    

    len(特征)=30,因此这将生成4060个组合,其中n=3。当n=10时,这是30045015个组合。

    len(tuple(itertools.combinations(features, 10)
    

    而不是生成所有组合,然后按某些条件进行过滤,如本例中所示, 在这种情况下,是否可以生成所有组合?

    换句话说,生成所有组合,其中n=3、4、5。。。k、 给定“平均半径”和“平均纹理”出现在组合中?

    1 回复  |  直到 6 年前
        1
  •  3
  •   nosklo    6 年前

    只需生成组合 'mean radius' 'mean texture' 并将这两个元素添加到每个组合中,从而大大减少了组合的数量。这样你就不必过滤,生成的每个组合都会很有用。

    # remove the fixed features from the pool:
    features = set(features) - x 
    for s in itertools.combinations(features, n - len(x)):
        s = set(s) & x # add the fixed features to each combination
        print(s)