Python синтаксис перечислимого массива - PullRequest
0 голосов
/ 03 августа 2020

Я пишу в Python и пишу в консоль с массивом, которым я манипулирую, и у меня есть вопрос по синтаксису.

Массив передается, и я создаю еще один массив для отслеживания позиции, используя вместе с сортировкой массива, но я не понимаю, почему, когда я хочу получить доступ к итерируемому массиву, он становится 2d массивом

posarr = [*enumerate(arr)]
posarr.sort(key = lambda it:it[1])

Затем для доступа из al oop это:

posarr[i][0] == blah

вместо

posarr[i] == blah

?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Примечание: Функция enumerate() присваивает индекс каждому элементу в повторяемом объекте

Итак, posarr = [*enumerate(arr)] создаст новый массив кортежей, где первым элементом кортежа будет индекс , а вторым элементом будет массив элемент с этим индексом.

После posarr = posarr.sort(key = lambda it:it[1]), posarr будет None, потому что list.sort() ничего не возвращает. Сортирует массив на месте . Это должно быть так: posarr.sort(key = lambda it:it[1]).

posarr[i] вернет кортеж с индексом i, поэтому для доступа к элементу по этому индексу вам нужно сделать что-то вроде это posarr[i][1]. posarr[i][0] - это индекс элемента posarr[i][1].

Итак, posarr не является 2-мерным массивом , это просто массив кортежей .

0 голосов
/ 03 августа 2020

Это не 2D-массив, это список кортежей. В каждом кортеже первый элемент - это индекс, а второй - значение (как и следовало ожидать от enumerate).

Забудьте сейчас о сортировке, просто посмотрите на что posarr содержит, например:

>>> posarr = [*enumerate('cab')]
>>> posarr
[(0, 'c'), (1, 'a'), (2, 'b')]

Кстати, это не имеет ничего общего с синтаксисом.

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