如何使用itertools解决此问题?

时间:2019-10-07 17:02:45

标签: python itertools

您好,我尝试使用此工具:

Startup.Configure

但是我得到这个结果:

app.Use((context, next) =>
{
    context.Request.Scheme = "https";
    return next();
});

我想得到这些结果:

list(combinations('01', 3))

另外,我也希望有不同的情况。

例如,给定[] ,我希望得到以下结果:

000
001
011
111
101
100
010

是否可以使用111做这两件事?

2 个答案:

答案 0 :(得分:0)

这是一个解决方案,部分使用了this answer中的解决方案。

  • alexis答案中的分区功能(请参阅链接) 返回划分成组的列表(即[[[1,1,1]],[[1,1],[1]],[[1],[1,1]],[[1],[1 ],[1]]]
  • 要获取您问题中的数字,我添加了一个部分,该部分仅存储每个内部列表的总和
  • list(dict.fromkeys(...))用于删除重复项

代码

def partition(collection):
    if len(collection) == 1:
        yield [ collection ]
        return

    first = collection[0]
    for smaller in partition(collection[1:]):
        # insert `first` in each of the subpartition's subsets
        for n, subset in enumerate(smaller):
            yield smaller[:n] + [[ first ] + subset]  + smaller[n+1:]
        # put `first` in its own subset 
        yield [ [ first ] ] + smaller


elements = list([1,1,1])

lst = list(dict.fromkeys([ tuple([sum(p[1][i]) for i in range(len(p[1]))]) for p in enumerate(partition(elements), 1) ]))

print(sorted(lst))

输出:

[(1, 1, 1), (1, 2), (2, 1), (3,)]

答案 1 :(得分:0)

您似乎在问两个独立的问题。根据您的结果:

  1.   

    000001011111101100010

通过permutations_with_replacement使用itertools.product组合键。

  1.   

    111 12 21 3

通过partitions使用more_itertools.partitions算法。

给出

import itertools as it

import more_itertools as mit

代码

# 1 - Permutation w Replacement
>>> list(it.product("01", repeat=3))
[('0', '0', '0'),
 ('0', '0', '1'),
 ('0', '1', '0'),
 ('0', '1', '1'),
 ('1', '0', '0'),
 ('1', '0', '1'),
 ('1', '1', '0'),
 ('1', '1', '1')]

# 2 - Partitions
>>> list(mit.partitions("111"))
[[['1', '1', '1']],
 [['1'], ['1', '1']],
 [['1', '1'], ['1']],
 [['1'], ['1'], ['1']]]

详细信息

要获得特定的结果,请使用列表理解:

# 1
>>> ["".join(x) for x in it.product("01", repeat=3)]

['000', '001', '010', '011', '100', '101', '110', '111']

# 2
>>> [[sum(map(int, x)) for x in sub] for sub in mit.partitions("111")]

[[3], [1, 2], [2, 1], [1, 1, 1]]

more_itertools是第三方软件包。使用> pip install more-itertools安装。