我需要生成一个由元组组成的元组的所有可能组合。
我已经有了这个内容,应该包含所有的组合...我认为。
( (base1 , position1) , (base2 , position2) )
这里有一个列表 bases = ["U", "C", "A", "G"]
和一个位置列表 positions = [0,1,2,3,4,5,6,7,8]
.
要求:
- 不重复
- 碱基可以相同,但是位置必须不同
- 顺序不能打乱。
例如:
( (A,1), (B,2) ) == ( (B,2) , (A,1) )
,而( (A,1), (B,1) )
应该被放弃。
示例输出:
[ ( (U,0) , (U,1) ), ( (U,0) , (U,2) ), ( (U,0) , (U,3) ) ...]
应该有448个元素
例子:
对于长度为2的字符串:
((U,0),(U,1))
((U,0),(C,1))
((U,0),(A,1))
((U,0),(G,1))
((C,0),(U,1))
((C,0),(C,1))
((C,0),(A,1))
((C,0),(G,1))
((A,0),(U,1))
((A,0),(C,1))
((A,0),(A,1))
((A,0),(G,1))
((G,0),(U,1))
((G,0),(C,1))
((G,0),(A,1))
((G,0),(G,1))
我已经有了这个内容,应该包含所有的组合...我认为。
到目前为止,我只有这些。
all_possible = []
nucleotides = ["U","C","A","G"]
for i in range(len(nucleotides)):
for j in range(8):
all_possible.append(((nucleotides[i],j),(nucleotides[i],j)))
itertools
几乎肯定有一些能够帮助你解决这个问题的内容:https://docs.python.org/3/library/itertools.html - Jacklen([((b1, p1), (b2, p2)) for (b1, b2) in product(bases, bases) for (p1, p2) in combinations(positions, 2)])
的结果为576,而不是448。我认为您的“positions”列表太长了。 - bli