【问题标题】:create list of binary strings (Python)创建二进制字符串列表(Python)
【发布时间】:2015-08-07 04:45:29
【问题描述】:

我有一个有向多重图,并想用表示每个节点坐标的二进制字符串来识别节点。
如何根据多重图的维度构建这些坐标的列表?

坐标的顺序也是相关的。第一个数字为零,然后是所有包含一个 1 的数字,然后是所有包含两个 1 的数字,依此类推。所有这些数字分组都必须按相反的字典顺序排列。

一个例子:

n = 3
bin_str = [000, 100, 010, 001, 110 101, 011, 111]

有没有聪明的方法来做到这一点?

【问题讨论】:

    标签: python list binary


    【解决方案1】:

    你可以使用itertools.product:

    from itertools import product
    n = 3
    # generate product in reverse lexicographic order
    bin_str = [''.join(p) for p in product('10', repeat=n)]
    # ['111', '110', '101', '100', '011', '010', '001', '000']    
    # sort by number of ones
    bin_str.sort(key=lambda s: s.count('1'))
    # ['000', '100', '010', '001', '110', '101', '011', '111']
    

    【讨论】:

    • 哇。多么美妙的解决方案。谢谢。
    【解决方案2】:

    也可以使用递归来完成

    def bin_list(n):
          if n == 0:
                #base case
                return ['']
          else:
                return [i + '0' for i in bin_list(n-1)] + [i + '1' for i in bin_list(n-1)]
    

    【讨论】:

    • 这也不错。但速度要慢得多。
    猜你喜欢
    • 2019-01-19
    • 2014-03-30
    • 2020-06-20
    • 2015-02-22
    • 2021-11-09
    • 2015-11-21
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多