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,因此 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”),这实际上是你的问题所关心的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |