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

时间:2018-04-12 20:57:38

标签: python list

您能否提供建议或将我重定向到相关主题。 我是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)

3 个答案:

答案 0 :(得分:2)

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

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

输出:

..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]))))

或者:

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

答案 1 :(得分:1)

您可以使用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....

答案 2 :(得分:-1)

如果您被允许使用第三方库,可以使用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....