我在简化脚本方面遇到了困难。我目前生成的具有所有可能组合的数组列表(给定二进制字符串中的位数),消除了它们的组合值超过我需要交换的位数的列表,然后生成其绝对减去的列表值。
例如:
如果我提供'101'它将创建列表: [1,0,1]
然后它会询问我想要交换多少。如果我说'2'
它将花费原始列表的长度(3),并为该长度生成所有可能的二进制组合: (0,0,00,1,01,1,00,1,1)
然后它将消除组合值不等于'2'的那些: (1,1,0[0,1,1]) ,从原始列表中减去它们的值,取绝对值,给我: (0,1,1[1,1,0])
itertools.combinations 在这里特别方便 - 我们可以告诉它给我们翻转N个索引的组合,然后依次翻转每个索引。
这是一个使用itertools和生成器函数的示例:
import itertools
def n_indices_flipped(sequence, n):
for indices_to_flip in itertools.combinations(range(len(sequence)), n):
item = sequence[:]
for index in indices_to_flip:
# flip 0 to 1 or vice versa
item[index] = 1 - item[index]
yield item
all_flipped_variants = list(n_flipped([1, 0, 1], 2))
print(all_flipped_variants)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。