在 python 3 中使用 itertools.product 和列表

发布于 2024-08-22 22:57:08 字数 613 浏览 5 评论 0原文

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

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

例如,字符“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

血之狂魔 2024-08-29 22:57:08

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

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

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

You can use *pool to "unpack" the list when calling product():

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

This syntax expands the list pool into separate positional parameters.

别在捏我脸啦 2024-08-29 22:57:08

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

itertools.product(pool[0],pool[1],...pool[len(pool)-1]) is equivalent to itertools.product(*pool)

import itertools

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

pool=[F,I]

for n in itertools.product(*pool):
   print(''.join(n))
人间☆小暴躁 2024-08-29 22:57:08

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

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

pool=[F,I]
lista = []

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

lista

在此处输入图像描述

Sometimes (in my opinion more often) the list does not need a printout:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文