2013-04-07 32 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)]