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)
索引魔法:
>>> 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)
| 归档时间: |
|
| 查看次数: |
4628 次 |
| 最近记录: |