我有一個定向的多圖,並希望用二進制字符串標識節點,代表每個節點的座標。
如何根據多圖的尺寸建立這些座標的列表?創建二進制字符串列表(Python)
座標的順序也是相關的。第一個數字是零,然後是所有數字中有一個1,然後是所有數字中有兩個1,等等。所有這些數字的分組必須按逆序詞序。
一個例子:
n = 3
bin_str = [000, 100, 010, 001, 110 101, 011, 111]
有一個聰明的辦法做到這一點?
我有一個定向的多圖,並希望用二進制字符串標識節點,代表每個節點的座標。
如何根據多圖的尺寸建立這些座標的列表?創建二進制字符串列表(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)]
這也很好。但相當慢。 – sebastian
哇來完成。多麼美麗的解決方案。謝謝。 – sebastian