我有以下几点:
a_list = [A,B,C]
r1 = range(1,5)
r2 = range(1,5)
r3 = range(1,5)
我想能够找到这个列表中的元素的各种组合的范围。例如:
combi1 = [A, B, C, C, C]
combi2 = [A, A, B, C, C]
combi3 = [A, A, A, B, C]
combi4 = [A, B, B, C, C]
等等
如果只有2range
,我可以这样做,但我不知道如何将3range
放入。你知道吗
inc = range(1, 5)
desc = range(5, 1, -1)
combis = [list(itertools.chain(*(itertools.repeat(elem, n) for elem, n in zip(list, [i,j])))) for i,j in zip(inc,desc)]
解决方案:
def all_exist(avalue, bvalue):
return all(any(x in y for y in bvalue) for x in avalue)
combins = itertools.combinations_with_replacement(a_list, 5)
combins_list = [list(i) for i in combins]
for c in combins_list:
if all_exist(a_list, c) == True:
print c
输出:
['A', 'A', 'A', 'B', 'C']
['A', 'A', 'B', 'B', 'C']
['A', 'A', 'B', 'C', 'C']
['A', 'B', 'B', 'B', 'C']
['A', 'B', 'B', 'C', 'C']
['A', 'B', 'C', 'C', 'C']
@doyz。我想这可能就是你想要的:
从一个列表
abc = ['A','B','C']
中,您希望获得它的各种组合,并替换。Python内置了itertools
来实现这一点。你知道吗这是替换的前10个组合:
如果您想包含
abc
中的所有元素,这里有一种方法,也包括排列:这样行吗?你知道吗
*注意:
itertools.combinations_woth_replacement
和itertools.permutations
不会产生一个列表或元组,而是一个不同的对象本身,因此不能将其视为这些对象。你知道吗相关问题 更多 >
编程相关推荐