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

7
我正在尝试创建一个可能的密码子列表,给定一个蛋白质序列。
基本上,我要创建的脚本将处理给定的字符串输入,并输出另一组字符串的可能组合,该输入表示这些字符串。
例如,字符“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)

当我将 itertools.product 中的 pool 替换为 pool[0],pool[1] 时,它能够正常工作。但是我无法弄清楚如何使其能够处理用户输入的长度大于2个字符的字符串(即不要硬编码)。
感谢您提前的帮助!
3个回答

8
您可以在调用product()时使用*pool来“解包”列表:
for n in itertools.product(*pool):
   print(n)

这个语法将列表pool扩展成单独的位置参数。


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

0
有时候(我认为更经常)列表不需要打印输出:
F = ['UUU', 'UUC']
I = ['AUU', 'AUC', 'AUA']

pool=[F,I]
lista = []

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

lista

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接