Python 如何获得列表的旋转输出?

Python 如何获得列表的旋转输出?,python,list,Python,List,你能帮我提个建议吗?或者让我转到相关的话题。。 我不熟悉python和编程,这里有点像堆栈。我必须获得以下输出: ..OO.OO.. .OOOOOOO. .OOOOOOO. ..OOOOO.. ...OOO... ....O.... 但我得到的却是: ...... .OO... OOOO.. OOOOO. .OOOOO OOOOO. OOOO.. .OO... ...... grid = [['.', '.', '.', '.', '.', '.'], ['.', 'O',

你能帮我提个建议吗?或者让我转到相关的话题。。 我不熟悉python和编程,这里有点像堆栈。我必须获得以下输出:

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
但我得到的却是:

......
.OO...
OOOO..
OOOOO.
.OOOOO
OOOOO.
OOOO..
.OO...
...... 

grid = [['.', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for i in range(0, len(grid)):
  output = ""
  for j in range(0,len(grid[i])):
    output += str(grid[i][j])
  print(output)

您需要将索引反向到
网格[j][i]
。这还要求您更改范围以使列表的轴对齐(因为您的行现在是列):

产出:

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
你也不需要
0
作为范围的开始,因为
0
是默认值,缩进应该是
4
空格,所以我也更正了:)


这也可以在一个班轮中完成:

要么:

print('\n'.join(''.join(grid[j][i] for j in range(len(grid))) for i in range(len(grid[0]))))
或:


您可以使用zip按列顺序遍历网格进行打印:

for row in zip(*grid) : print("".join(row))

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
注意,这假设原始网格中的行0表示转置版本中的列0。如果需要90度旋转,则需要使用row[:-1]反转行元素的顺序

grid = [['*', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for row in zip(*grid) : print("".join(row[::-1]))

..OO.OO.*
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

如果允许您使用第三方库,可以使用
numpy.rotate
和设置
k=-1
[即90%顺时针]:

import numpy as np

print(np.array(grid))

[['.' '.' '.' '.' '.' '.']
 ['.' 'O' 'O' '.' '.' '.']
 ['O' 'O' 'O' 'O' '.' '.']
 ['O' 'O' 'O' 'O' 'O' '.']
 ['.' 'O' 'O' 'O' 'O' 'O']
 ['O' 'O' 'O' 'O' 'O' '.']
 ['O' 'O' 'O' 'O' '.' '.']
 ['.' 'O' 'O' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.']]

for x in np.rot90(np.array(grid), k=-1):
    print(''.join(x))

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

只需交换i和j:
output+=str(网格[j][i])
print('\n'.join('.join(i代表x中的i)代表zip中的x(*网格[:-1]))
:D@chrisz
print('\n'.join(map(''.join,zip(*grid)))
-beat ya:)一行代码看起来很复杂)谢谢你这么好的解释!
grid = [['*', '.', '.', '.', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['.', 'O', 'O', 'O', 'O', 'O'],
        ['O', 'O', 'O', 'O', 'O', '.'],
        ['O', 'O', 'O', 'O', '.', '.'],
        ['.', 'O', 'O', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for row in zip(*grid) : print("".join(row[::-1]))

..OO.OO.*
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
import numpy as np

print(np.array(grid))

[['.' '.' '.' '.' '.' '.']
 ['.' 'O' 'O' '.' '.' '.']
 ['O' 'O' 'O' 'O' '.' '.']
 ['O' 'O' 'O' 'O' 'O' '.']
 ['.' 'O' 'O' 'O' 'O' 'O']
 ['O' 'O' 'O' 'O' 'O' '.']
 ['O' 'O' 'O' 'O' '.' '.']
 ['.' 'O' 'O' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.']]

for x in np.rot90(np.array(grid), k=-1):
    print(''.join(x))

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....