python - 生成组合(itertools)?

时间:2014-11-19 14:50:08

标签: python pycharm itertools

有人可以给我一些提示,让我走上正确的道路。

我需要编写Python代码来提出所有组合来解决以下问题: 我需要生成所有可能的字母组合。总会有6个字母。但是,只有某些字母可以在每个位置,例如

  • 第一个字符只能是字母a或t(2种可能性)
  • 第二个字符可以是a,t或c(3种可能性)
  • 第三个字符可以是g或t(2种可能性)
  • 第四个字符可以是a,t,c或g(4种可能性)
  • 第五个字符可以是c,g或t(3种可能性)
  • 第六个字符可以是b a或t(2种可能性)

我认为我应该使用Python itertools,但我看过的所有示例都为每个位置提供了固定数量的选项(在我的例子中是字母),而为此,可用的字母将根据位置而变化。

任何帮助非常感谢。

1 个答案:

答案 0 :(得分:3)

您想使用itertools.product执行此任务

您需要为每个可能的值创建一个列表列表:

import itertools

l = [
        ['a','t'],
        ['a','t','c'],
        ['g','t'],
        ['a','t','c','g'],
        ['c','g','t'],
        ['a','t']
    ]

for out in itertools.product(*l):
    print out;

输出288项。一小部分样本是:

('t', 't', 't', 'g', 'g', 't')
('t', 't', 't', 'g', 't', 'a')
('t', 't', 't', 'g', 't', 't')
('t', 'c', 'g', 'a', 'c', 'a')
('t', 'c', 'g', 'a', 'c', 't')
('t', 'c', 'g', 'a', 'g', 'a')
('t', 'c', 'g', 'a', 'g', 't')
('t', 'c', 'g', 'a', 't', 'a')
('t', 'c', 'g', 'a', 't', 't')
('t', 'c', 'g', 't', 'c', 'a')
('t', 'c', 'g', 't', 'c', 't')
('t', 'c', 'g', 't', 'g', 'a')
('t', 'c', 'g', 't', 'g', 't')
('t', 'c', 'g', 't', 't', 'a')
('t', 'c', 'g', 't', 't', 't')
('t', 'c', 'g', 'c', 'c', 'a')
('t', 'c', 'g', 'c', 'c', 't')
('t', 'c', 'g', 'c', 'g', 'a')

正如jonsharpe在评论中指出的那样,你也可以有一个有效字符串列表(用上面的l变量代替):

l = ['at','atc','gt','atcg','cgt','at']