每个位置受限的Python排列
我正在学习如何生成一个字符串的所有排列,但每个位置的选择是有限制的——这就像是排列的排列。
我需要长度为8的字符串,比如第一个位置可以是'A'、'G'或'T',而第三个位置只能是'A',依此类推。
就像这样:
Pos: 1 2 3 4 5 6 7 8
A A A A A
G G G G G G G
T T T
一个示例输出是 'AGAGGGGT'
根据我的计算,这应该能产生 3*3*1*1*1*2*1*3 = 54 种不同的变体。
我尝试过以下方法,但没有成功:
import itertools
print list(itertools.permutations([['A','G','T']['A','G','T']['A']['G']['G']['A','G']['G']['A','G','T']], 8))
不过我想这应该是类似这样的思路。
1 个回答
1
我觉得你在找的是 itertools.product 这个东西:
In [83]: import itertools as IT
In [93]: IT.product('AGT', 'AGT', 'A', 'G', 'G', 'AG', 'G', 'AGT')
Out[93]: <itertools.product at 0xba654b4>
In [94]: len(list(IT.product('AGT', 'AGT', 'A', 'G', 'G', 'AG', 'G', 'AGT')))
Out[94]: 54
IT.product
会返回一个元组的迭代器。要把这些元组转换成字符串,你可以在列表推导式中使用 ''.join
:
In [96]: [''.join(item) for item in IT.product('AGT', 'AGT', 'A', 'G', 'G', 'AG', 'G', 'AGT')]