如何使用python旋转此列表列表

9 python

我有一个列表列表,我需要旋转90度.我设法获得了第一个新行,但是我无法获得其他任何一个,所以我把for循环放入一个函数中,我每次迭代都增加了一个计数,但我刚刚给终端打印了一大堆.

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['0', '0', '0', '0', '0', '.'],
        ['.', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)

我需要如何旋转.

'''
..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....

'''
Run Code Online (Sandbox Code Playgroud)

我的代码

def get_row(grid, new_grid, new_row, count):
    for row in grid:
        new_row.append(row[count])
    new_grid.append(new_row)

new_grid = []
new_row = []
count = 0

for x in range(0, 6):
    count = 0
    get_row(grid, new_grid, new_row, count)
    count +=1

for row in new_grid:
    print row
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 10

你想要的是转置你的列表列表,使行列和列成行:

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['0', '0', '0', '0', '0', '.'],
        ['.', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

print("\n".join(map("".join,zip(*grid))))
Run Code Online (Sandbox Code Playgroud)

日期:

..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
Run Code Online (Sandbox Code Playgroud)

或者使用稍微不同的语法print_function,我们可以用*解包并指定一个sep的分隔符:

from __future__ import print_function

print(*map("".join,zip(*grid)),sep="\n")
Run Code Online (Sandbox Code Playgroud)

使用python2如果你不想创建中间列表,你可以使用itertools它,这将成为:

from __future__ import print_function
from itertools import imap, izip
print(*imap("".join,izip(*grid)),sep="\n")
Run Code Online (Sandbox Code Playgroud)

为了完整性并向您展示您的转置列表的确切内容:

from pprint import pprint as pp
pp(list(zip(*grid)))

[('.', '.', '0', '0', '.', '0', '0', '.', '.'),
 ('.', '0', '0', '0', '0', '0', '0', '0', '.'),
 ('.', '0', '0', '0', '0', '0', '0', '0', '.'),
 ('.', '.', '0', '0', '0', '0', '0', '.', '.'),
 ('.', '.', '.', '0', '0', '0', '.', '.', '.'),
 ('.', '.', '.', '.', '0', '.', '.', '.', '.')]
Run Code Online (Sandbox Code Playgroud)

如果你真的想要列表而不是元组,你可以map回到列表:

pp(list(map(list,zip(*grid))))

 [['.', '.', '0', '0', '.', '0', '0', '.', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '.', '0', '0', '0', '0', '0', '.', '.'],
 ['.', '.', '.', '0', '0', '0', '.', '.', '.'],
 ['.', '.', '.', '.', '0', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)


R N*_*Nar 5

索引魔法:

>>> grid = [['.', '.', '.', '.', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['0', '0', '0', '0', '0', '.'],
        ['.', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '.'],
        ['0', '0', '0', '0', '.', '.'],
        ['.', '0', '0', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]
>>> for i in range(len(grid[0])): #assuming they all have the same length
    print (''.join(x[i] for x in grid))


..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
Run Code Online (Sandbox Code Playgroud)

或者保存到新网格:

>>> newgrid = []
>>> for i in range(len(grid[0])): #assuming they all have the same length
    newgrid.append([x[i] for x in grid])


>>> newgrid
[['.', '.', '0', '0', '.', '0', '0', '.', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '.', '0', '0', '0', '0', '0', '.', '.'],
 ['.', '.', '.', '0', '0', '0', '.', '.', '.'],
 ['.', '.', '.', '.', '0', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)

或一行:

>>> newgrid = [[x[i] for x in grid] for i in range(len(grid[0]))]
>>> newgrid
[['.', '.', '0', '0', '.', '0', '0', '.', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '.', '0', '0', '0', '0', '0', '.', '.'],
 ['.', '.', '.', '0', '0', '0', '.', '.', '.'],
 ['.', '.', '.', '.', '0', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)