2013-04-07 56 views
2

我想生成帶有圖案有點列表一個列表,代碼是這樣的:緊湊的新一代多個列表的乘法運算符

sublist = [1] * N_SUBBITS 
sublist[0] = 0 
bits = sublist * N_SUBLISTS 

如果N_SUBBITS = 4N_SUBLISTS = 3,這會產生這樣的名單:

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

是否可以使用單個表達式來編寫它?

回答

3

如何:

>>> N_SUBBITS = 4 
>>> N_SUBLISTS = 3 
>>> ([0] + [1]*(N_SUBBITS-1)) * N_SUBLISTS 
[0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1] 
+0

謝謝,這是儘可能簡潔,因爲我需要 – perreal 2013-04-07 22:45:03

3

請問這是嗎?

In [4]: [1 if x % N_SUBBITS else 0 for x in range(N_SUBBITS * N_SUBLISTS)] 
Out[4]: [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1] 

還有一句:

In [15]: [1 if x else 0 for l in range(N_SUBLISTS) for x in range(N_SUBBITS)] 
Out[15]: [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1] 

 

變化:

[x % N_SUBBITS and 1 for x in range(N_SUBBITS * N_SUBLISTS)] 
[x and 1 for l in range(N_SUBLISTS) for x in range(N_SUBBITS)]