我想单独访问网格的元素,但不断收到以下错误:
类型错误:列表索引必须是整数或片,而不是STR
总的来说,我想作为编程挑战打印的心脏正确的方法并没有在其一侧。我知道我可以像打印单个元素[1] [2]但是,当涉及到通过他们循环,这是我在哪里卡住了。
我试图寻找谷歌和堆栈溢出的答案。
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
def print_heart(listx):
for y in listx:
for x in y:
print(listx[x][y])
print()
print_heart(grid)
这可能是在欺骗你的项目,但你可以转换为numpy的数组,然后简单地调换。
import numpy as np
np.array(grid).transpose()
第一种选择:使用内置的zip()
。 zip
返回的元组,其中,第i个元组包含来自每个参数序列或iterables的第i个元素的迭代器。无需外部库需要。欲了解更多额外的解释:https://www.geeksforgeeks.org/transpose-matrix-single-line-python/
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
new_grid = zip(*grid)
for x in new_grid:
for y in x:
print (y, end='')
print()
第二个选项:使用嵌套列表理解
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', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
new_grid = [[grid[j][i] for j in range(len(grid))] for i in range(len(grid[0]))]
for x in new_grid:
for y in x:
print (y, end='')
print()
输出:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....