使用列表推导生成带计数器的2D数组

时间:2017-01-09 08:47:53

标签: python list list-comprehension

我是python的新手,并且更多地了解列表推导。我想生成一个像这样的简单2D数组:

预期清单:

[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]

我尝试了什么:

[[j for j in range(6)] for _ in range(6)]

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

也许我在第二个循环中需要某种计数器而不是j,但是这里不允许执行count += 1并且会出现语法错误。

5 个答案:

答案 0 :(得分:5)

使用带有range(start, stop[, step])参数的step函数的简单解决方案:

result = [list(range(i, i+4)) for i in range(1, 16, 4)]
print(result)

输出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
  

对于肯定步骤,范围r的内容由...确定   公式r[i] = start + step*i其中i >= 0r[i] < stop

答案 1 :(得分:1)

[[a for a in range(1+(4*b), 5+(4*b))] for b in range(0, 4)]

这使用相同的列表理解。

<强>输出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

答案 2 :(得分:1)

使用嵌套列表推导:

[[j+i*4 for j in range(1,5)] for i in range(4)]

输出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

答案 3 :(得分:0)

通过创建for循环来进行推导:

l = []
n = 4
for i in range(3):
    l2 = [j + (n*i) for j in range(n)]
    l.append(l2)

然后将其转换为列表理解:

x = [[j + (n*i) for j in range(n)] for i in range(3)]

输出:

[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

答案 4 :(得分:0)

您还可以使用get_chunks()库的utilspie功能:

>>> from utilspie.iterutils import get_chunks

>>> list(get_chunks(range(1, 17), 4))
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

注意: utilspie不是内置的库。您必须通过执行以下操作从pip明确安装它:

sudo pip install utilspie