在Python 3中使用itertools.product和list的工作方法

问题描述 投票:6回答:3

我试图创建一个给定的蛋白质序列的可能的密码子列表,基本上,我试图创建的脚本将处理给定的字符串输入,并输出输入代表的另一组字符串的可能组合。

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

例如,字符'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)

当我替换掉 poolitertools.productpool[0], pool[1]. 但我不知道如何使它工作,使用户可以输入一个超过2个字符的字符串(即不使它硬编码)。

先谢谢你的帮助

python python-3.x itertools
3个回答
7
投票

你可以使用 *pool 以在调用该列表时 "解包"。product():

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

© www.soinside.com 2019 - 2024. All rights reserved.