在Python 3中使用itertools.product和列表
我正在尝试根据一个蛋白质序列创建可能的密码子列表。
简单来说,我想写一个脚本,它可以处理输入的字符串,并输出这个字符串所代表的另一组字符串的所有可能组合。
举个例子,字符 'F' 可以表示 'UUU' 或 'UUC';字符 'I' 可以表示 'AUU'、'AUC' 或 'AUA'。
如果输入是 'FI',那么我想要的输出应该是: 'UUUAUU'、'UUUAUC'、'UUUAUA'、'UUCAUU'、'UUCAUC' 和 'UUCAUA'。
我现在卡在这段代码上:
import itertools
F = ['UUU', 'UUC']
I = ['AUU', 'AUC', 'AUA']
seq, pool = 'FI', []
for i in seq:
pool.append(eval(i))
for n in itertools.product(pool):
print(n)
当我把 pool
在 itertools.product
中替换成 pool[0], pool[1]
时,它是可以工作的。但我不知道怎么做才能让用户输入超过两个字符的字符串(也就是说,不想把它写死)。
提前感谢你的帮助!
3 个回答
3
itertools.product(pool[0], pool[1], ... pool[len(pool)-1]) 这个写法和 itertools.product(*pool) 是一样的。
import itertools
F = ['UUU', 'UUC']
I = ['AUU', 'AUC', 'AUA']
pool=[F,I]
for n in itertools.product(*pool):
print(''.join(n))
8
你可以用 *pool
来“拆开”列表,在调用 product()
时使用:
for n in itertools.product(*pool):
print(n)
这个写法会把列表 pool
拆分成一个个单独的参数。