在 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[0], pool[1]
替换 itertools.product
中的 pool
时,它就起作用了。但我不知道如何让它工作,以便用户可以输入超过 2 个字符的字符串(即不使其硬编码)。
预先感谢您的帮助!
I'm trying to create a possible list of codons given a protein sequence.
Basically, the script i'm trying to create will process a given string input and outputs a possible combinations of another set of strings the input represents.
For example, the character 'F' represents either 'UUU' or 'UUC'; the character 'I' represents either 'AUU', 'AUC', or 'AUA'.
Given the input 'FI', the script I'm trying to create should output:
'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC', and 'UUCAUA'.
I'm currently stuck with this code:
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)
It works when I replace pool
in itertools.product
with pool[0], pool[1]
. But I can't figure out how to make it work so that the user can input a string with more than 2 character (i.e. not to make it hard-coded).
Thanks in advance for the help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以在调用
product()
时使用*pool
来“解包”列表:此语法将列表
pool
扩展为单独的位置参数。You can use
*pool
to "unpack" the list when callingproduct()
:This syntax expands the list
pool
into separate positional parameters.itertools.product(pool[0],pool[1],...pool[len(pool)-1]) 相当于 itertools.product(*pool)
itertools.product(pool[0],pool[1],...pool[len(pool)-1]) is equivalent to itertools.product(*pool)
有时(在我看来更常见)该列表不需要打印输出:
Sometimes (in my opinion more often) the list does not need a printout: