Что делает добавление второго параметра в a для l oop с вложенным enumerate ()? - PullRequest
2 голосов
/ 19 февраля 2020

Я снова пытаюсь набрать Python и хочу создать текстовое поле Ticktacktoe.

В настоящее время я работаю над макетом с 0, представляющим пустые места в играх, и числами вверх. сверху и слева для координат. Это то, что я до сих пор:

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for row in enumerate(game):
    print(row)

, который выводит это:

     0  1  2
(0, [0, 0, 0])
(1, [0, 0, 0])
(2, [0, 0, 0])

Проблема в том, что я хочу, чтобы это выглядело так:

   0  1  2
0 [0, 0, 0]
1 [0, 0, 0]
2 [0, 0, 0]

Теперь я нашел способ, добавив 'count' в for для l oop. Но я вообще не понимаю, почему. Поиск документации Python не помог. Почему это происходит? Почему это избавляет от скобок и запятых?

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for count, row in enumerate(game):
    print(count, row)

Редактировать: Я думаю, что теперь я понимаю. Поскольку enumarate() возвращает индекс и значение, все, что в основном происходит, это то, что я присвоил count Индекс и строка в основном значение? И именно поэтому теперь есть скобки, так как print печатает более 1 переменной, используя пробел? Не могли бы вы подтвердить это?

Ответы [ 3 ]

3 голосов
/ 19 февраля 2020

for row in enumerate(game):

Будет напечатано row, что является кортежем. Кортежи печатаются в формате (item1, item2, ...)

Пример:

>>> row = (5, [0,0,0])
>>> print(row)
(5, [0,0,0]) 

for count, row in enumerate(game): Здесь результат распаковывается. То, что было кортежем, теперь разделено на count и row. print может принимать переменное количество аргументов и по умолчанию разделяет их пробелом.

Пример:

>>> count = 5
>>> row = [0,0,0]
>>> print(count, row)
5 [0,0,0]

Вложенные списки

Вложенный список - это список, который содержит другие списки. Простой пример:

nested = [[0,1,2], [3,4,5]]

Вы можете распаковать вложенный список (или любой список вообще)

list012, list345 = nested

Это то, что делает for count, row in enumerate(game):.

enumerate(game) возвращает кортеж: счетчик и обычный объект. Мы можем сравнить это так:

my_list = [10,20,30]
for i in my_list:
    print i    # prints 10 20 30
for i in enumerate(my_list):
    print i    # prints (0,10) (1,20) (2,30)
1 голос
/ 19 февраля 2020

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

0 голосов
/ 19 февраля 2020

enumerate(items) возвращает список кортежей числа и вашего элемента, где число увеличивается на единицу для каждого нового элемента в списке (считая). В этом случае enumerate возвращает следующие кортежи:

{0, [0, 0, 0]}, {1, [0, 0, 0]}, {2, [0, 0, 0]}

Используя имя второй переменной в for для l oop, вы деструктурируете кортеж в count и row. В то время как раньше вы давали только 1 имя переменной, поэтому переменной был присвоен весь кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...