创建二进制字符串列表 (Python)
create list of binary strings (Python)
我有一个定向多图,想用表示每个节点坐标的二进制字符串来识别节点。
如何根据多图的维度构建这些坐标的列表?
坐标的顺序也有关系。第一个数字是零,然后是所有带有一个 1 的数字,然后是所有带有两个 1 的数字,依此类推。所有这些数字分组都必须按相反的字典顺序排列。
一个例子:
n = 3
bin_str = [000, 100, 010, 001, 110 101, 011, 111]
有什么巧妙的方法吗?
您可以使用 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']
也可以使用递归来完成
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)]
我有一个定向多图,想用表示每个节点坐标的二进制字符串来识别节点。
如何根据多图的维度构建这些坐标的列表?
坐标的顺序也有关系。第一个数字是零,然后是所有带有一个 1 的数字,然后是所有带有两个 1 的数字,依此类推。所有这些数字分组都必须按相反的字典顺序排列。
一个例子:
n = 3
bin_str = [000, 100, 010, 001, 110 101, 011, 111]
有什么巧妙的方法吗?
您可以使用 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']
也可以使用递归来完成
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)]