加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 订单排列

发布时间:2020-12-20 11:52:29 所属栏目:Python 来源:网络整理
导读:我正在尝试编写一个执行类似于itertools.permutation的函数的 Python函数. import itertoolsfor s in itertools.permutations("TCGA****") print s 这种功能的理想输出是 ('*','*','T','C','G','A')('*','A','*')('*','A')...('T','*') itertools.permutatio
我正在尝试编写一个执行类似于itertools.permutation的函数的 Python函数.

import itertools
for s in itertools.permutations("TCGA****")
    print s

这种功能的理想输出是

('*','*','T','C','G','A')
('*','A','*')
('*','A')
...
('T','*')

itertools.permutation和这个函数之间的唯一区别是维持了顺序,即’T’总是在’C’之前,在’A’之前的’G’之前.

以下是违反此规则的示例

('*','*')

‘C’和’G’的顺序已经改变.

如何在星号中生成维持订单“TCGA”的排列?

解决方法

一个想法是为列表索引范围内的 itertools.combinations生成’*’值的所有可能索引,然后根据这些索引构造每个可能的排列,相应地填充每个组合中未找到的索引的’TCGA’值.

由于您确保在每次迭代中使用所有TCGA,因此itertools.cycle是持续获得下一个位置的适当值的一种方法.这里perms被实现为生成器以允许惰性评估.

from itertools import combinations,cycle

char_cyc = cycle('TCGA')
combos = combinations(range(8),4)

perms = (['*' if i in combo else next(char_cyc) for i in range(8)]
         for combo in combos)

print(list(perms))

输出:

[['*','A'],['*','*'],['T','*']]

输出的正确指示是正确的是烫发的长度是70,等于8C4(或“8选择4”),这实际上是你的问题所关心的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读