我是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
并且会出现语法错误。
答案 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 >= 0
和r[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