2015-05-25 28 views
1

我有一個定向的多圖,並希望用二進制字符串標識節點,代表每個節點的座標。
如何根據多圖的尺寸建立這些座標的列表?創建二進制字符串列表(Python)

座標的順序也是相關的。第一個數字是零,然後是所有數字中有一個1,然後是所有數字中有兩個1,等等。所有這些數字的分組必須按逆序詞序。

一個例子:

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

有一個聰明的辦法做到這一點?

回答

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'] 
+0

哇來完成。多麼美麗的解決方案。謝謝。 – sebastian

1

也可以使用遞歸

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)] 
+0

這也很好。但相當慢。 – sebastian