Я хочу получить индивидуальный доступ к элементу моего списка списков (сетка сердца) и правильно распечатать сердце вверх - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь получить индивидуальный доступ к элементам сетки, но постоянно получаю следующую ошибку:

TypeError: списочные индексы должны быть целыми или кусочками, а не str

В целом, я хочу напечатать сердце правильно, а не на боку как вызов программирования.Я знаю, что могу печатать отдельные элементы, такие как [1] ​​[2], но когда дело доходит до их циклического просмотра, я застрял.

Я попытался найти ответ в Google и переполнение стека.

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) 

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Первый вариант : с использованием встроенного zip().zip возвращает итератор кортежей, где i-й кортеж содержит 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....
0 голосов
/ 08 февраля 2019

Это может быть обманом для вашего проекта, но вы можете преобразовать его в массив numpy, а затем просто транспонировать.

import numpy as np
np.array(grid).transpose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...