Python 3中使用itertools.product和列表的工作

2024-05-01 16:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个可能的密码子列表,给出一个蛋白质序列。

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

例如,字符“F”表示“UUU”或“UUC”;字符“I”表示“AUU”、“AUC”或“AUA”。

给定输入“FI”,我试图创建的脚本应输出: “UUUAUU”、“UUUAUC”、“UUUAUA”、“uucau”、“uucau”和“uucua”。

我现在被这个代码困住了:

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[0], pool[1]替换itertools.product中的pool时,它工作。但我不知道如何让它工作,以便用户可以输入一个超过2个字符的字符串(即,不让它硬编码)。

提前谢谢你的帮助!


Tags: 字符串in脚本for字符uuuseqfi
2条回答

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))

调用product()时,可以使用*pool来“解压缩”列表:

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

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

相关问题 更多 >