从列表中创建多维列表

时间:2014-04-10 03:20:47

标签: python list

我试图寻找答案,但尚未找到好的答案。如果可以在其他地方找到答案,我提前道歉。

Python的方法是什么?

height, width = 4, 4
grid = '01 02 03 04 04 03 02 01 04 04 04 04 01 02 01 02'
grid_list = []
grid = [int(x) for x in grid.split()]
for row in range(0, height):
    grid_list.append(grid[row * height:row * height + width])

我希望grid_list =[[1, 2, 3, 4], [4, 3, 2, 1], [4, 4, 4, 4], [1, 2, 1, 2]]

基本上,我想从字符串创建一个多维列表。我觉得应该有一个Python单线程。谢谢!

4 个答案:

答案 0 :(得分:2)

width = 4
string = '01 02 03 04 04 03 02 01 04 04 04 04 01 02 01 02'
grid = [int(x) for x in string.split()]
grid_list = [grid[i:i + width] for i in range(0, len(grid), width)]

运行之后:

>>> grid_list
[[1, 2, 3, 4], [4, 3, 2, 1], [4, 4, 4, 4], [1, 2, 1, 2]]

答案 1 :(得分:1)

虽然你可能不想使用Numpy,但我会把它放在这里。否则你可以看一下0605002的回答:

grid = '01 02 03 04 04 03 02 01 04 04 04 04 01 02 01 02'
grid = np.array([int(x) for x in grid.split()]).reshape((height, width))

答案 2 :(得分:1)

当且仅当所有元素长度相同(此处为双字母)时,您可以使用本机Python方法在一行中执行此操作:

>>> width = 4
>>> grid = '01 02 03 04 04 03 02 01 04 04 04 04 01 02 01 02'
>>> [[int(x) for x in grid[i:i+width*3].split()] for i in xrange(0, len(grid), width*3)]
[[1, 2, 3, 4], [4, 3, 2, 1], [4, 4, 4, 4], [1, 2, 1, 2]]

如果元素具有不同的长度,则以下单行代码可能会有所帮助:

>>> width = 4
>>> grid = '01 02 03 04 04 03 02 01 04 04 104 04 01 02 01 02'
>>> [[int(x) for x in grid.split()][i:i+width] for i in xrange(0, grid.count(" "), width)]
[[1, 2, 3, 4], [4, 3, 2, 1], [4, 4, 104, 4], [1, 2, 1, 2]]

希望它有所帮助!

答案 3 :(得分:0)

如果你允许使用numpy,我们也可以这样做:

>>> grid = '01 02 03 04 04 03 02 01 04 04 04 04 01 02 01 02'
>>> gint = [int(x) for x in grid.split()]
>>> numpy.array(gint).reshape(4,4)
array([[1, 2, 3, 4],
   [4, 3, 2, 1],
   [4, 4, 4, 4],
   [1, 2, 1, 2]])
>>>