6

我正在尝试创建一个可能的给定蛋白质序列的密码子列表。

基本上,我尝试创建的脚本将处理给定的字符串输入并输出输入表示的另一组字符串的可能组合。

例如,字符“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为. 但我不知道如何使它工作,以便用户可以输入一个超过 2 个字符的字符串(即不要使其硬编码)。itertools.productpool[0], pool[1]

在此先感谢您的帮助!

4

3 回答 3

7

您可以*pool在调用时使用“解包”列表product()

for n in itertools.product(*pool):
   print(n)

此语法将列表扩展pool为单独的位置参数。

于 2010-02-24T10:34:10.673 回答
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))
于 2010-02-24T10:59:29.433 回答
0

有时(在我看来更常见)列表不需要打印输出:

F = ['UUU', 'UUC']
I = ['AUU', 'AUC', 'AUA']

pool=[F,I]
lista = []

for n in itertools.product(*pool):
      lista.append(''.join(n))

lista

在此处输入图像描述

于 2020-05-15T15:39:48.357 回答