开发者社区> 问答> 正文

交换二进制数列表,但只有x长度

我在简化脚本方面遇到了困难。我目前生成的具有所有可能组合的数组列表(给定二进制字符串中的位数),消除了它们的组合值超过我需要交换的位数的列表,然后生成其绝对减去的列表值。

例如:

如果我提供'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])

展开
收起
一码平川MACHEL 2019-01-23 13:47:06 1852 0
1 条回答
写回答
取消 提交回答
  • 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
    

    Usage:

    all_flipped_variants = list(n_flipped([1, 0, 1], 2))
    print(all_flipped_variants)

    prints [[0, 1, 1], [0, 0, 0], [1, 1, 0]]

    2019-07-17 23:26:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载