Сплайсинг списка Python для 2D-массива - PullRequest
0 голосов
/ 18 марта 2019
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
matrix[3][1:] = matrix[3][0:-1]
print(matrix)

дает следующий вывод:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 13, 14, 15]]

Но:

rows = 3
k = 0
matrix[rows-k][1+k:-k] = matrix[rows-k][k:-1-k]
print(matrix)

дает следующий вывод:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 13, 14, 15, 14, 15, 16]]

Может кто-нибудь объяснить мне, что происходит?

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Интересный вопрос.

Это происходит потому, что

matrix[rows-k][1+k:-k] = matrix[rows-k][k:-1-k]

эквивалентно

matrix[3][1:0] = matrix[3][0:-1]

, что эквивалентно

matrix[3][1:1] = matrix[3][0:-1]

Таккогда вы делаете matrix[3][1:0] => matrix[index][start:stop:None]

Ваше начальное значение равно 1, что больше вашего конечного значения 0. В случае запуска> = stop Python устанавливает stop = start и возвращает пустой фрагмент.

Вы можете проверить значение матрицы [3] [1: 1], которая представляет собой пустой срез, подобный матрице [3] [1: 0]

>>> matrix[3][1:0]
[]
>>> matrix[3][1:1]
[]

Подробнее: Python doc

Если i больше или равно j, срез пустой

0 голосов
/ 18 марта 2019

Если вы вставите строки = 3 и k = 0:

matrix[3][1:0] = matrix[3][0:-1]

И это не то же самое , как ваша вторая строка:

matrix[3][1:] = matrix[3][0:-1]

Добавлено.

В первом примере вы вставляете некоторые данные из 1.позиция до конца :

a = [1, 2, 3, 4]
a[1:] = [100, 200, 300]
print(a)
OUTPUT: [1, 100, 200, 300]

Во втором случае вы вставляете значение между 0. и 1. позиция :

a = [1, 2, 3, 4]
a[1:0] = [100, 200, 300]
print(a)
OUTPUT: [1,100, 200, 300, 2, 3, 4]
...