我试图寻找答案,但尚未找到好的答案。如果可以在其他地方找到答案,我提前道歉。
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单线程。谢谢!
答案 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]])
>>>