Python как распечатать 2D-элементы сетки без вложенных циклов? - PullRequest
0 голосов
/ 05 апреля 2020

новый python ученик здесь. Я попытался напечатать каждый элемент в моей двумерной сетке, используя 2 переменные в моем l oop вместо вложенного l oop, вот код:

number_grid = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0]
]

for r, c in number_grid:
print(r, c)

, и я получаю эту ошибку:

 for r, c in number_grid:
ValueError: too many values to unpack (expected 2)

Мне также интересно понять значение и причину, по которой я получаю это сообщение об ошибке. Спасибо.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вызывая for r,c in number_grid, вы распаковываете внутренний список во время итерации по внешнему списку. Проблема в том, что первый внутренний список [1, 2, 3] содержит 3 элемента, и вы пытаетесь распаковать его только в две переменные, r и c. Вы также получите сообщение об ошибке в последнем внутреннем списке [0], который имеет только 1 элемент, таким образом, ничего не распаковывая в c.

Вы можете добиться большего успеха, перебирая внешний список. Отправной точкой будет что-то вроде приведенного ниже кода, где каждый row является списком, который вы можете распечатать или изменить соответствующим образом.

for row in number_grid: 
    print(' '.join([str(item) for item in row]))
0 голосов
/ 05 апреля 2020

Здесь есть хорошее объяснение здесь о том, почему вы получаете эту ошибку и как ее решить.

Для печати чисел без вложенных циклов вы можете использовать следующие способы:

number_grid = [[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9],
               [0]]

for grid in number_grid:
    print(*grid)

# 1 2 3
# 4 5 6
# 7 8 9
# 0

Или:

number_grid = [[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9],
               [0]]

print(' '.join(map(str, list(itertools.chain(*number_grid)))))

# 1 2 3 4 5 6 7 8 9 0
...