вопрос вставки нарезки, L [1: 1] - PullRequest
3 голосов
/ 01 января 2011

попрактиковался в некотором питоне, который довольно легко понять.

У меня есть

>>> L = [1,2,3,4]
>>> L[1:1] = [1,2,3]
>>> L
[1, 1, 2, 3, 2, 3, 4]

поэтому во второй строке на самом деле L[1:1] - пустой список, но как Python может понять, что вставить список [1,2,3] в начало с 1. Я предполагаю, что есть некоторые внутренние элементы, которые не прозрачны для нас, здесь, по-видимому, L[1:1] возвращает ссылку на индекс 1, даже если это возвращает пустой список ...

С наилучшими пожеланиями, Умут

Ответы [ 3 ]

5 голосов
/ 01 января 2011

L[1:1] означает срез списка L, начиная с индекса 1 (второй элемент), вплоть до индекса 1, но не включая его. Таким образом, это пустой список.Справа от назначения это просто анонимный пустой список.Но с левой стороны, назначение знает, где был сделан срез, и может соединить новое значение списка в нужном месте.

3 голосов
/ 01 января 2011

Нарезка ведет себя по-разному в зависимости от того, находится ли она в левой или правой части выражения. Когда он находится слева, он не возвращает список - вместо этого он ведет себя как объект среза, который знает больше о срезах и имеет присвоение, специально переопределенное для работы в качестве вставки.

1 голос
/ 20 июня 2013

Официальный Python Tutorial объясняет это лучше всего, на мой взгляд.Конец Глава 3.1.2 имеет следующую диаграмму:

 +---+---+---+---+---+
 | H | e | l | p | A |
 +---+---+---+---+---+
 0   1   2   3   4   5

Это иллюстрирует то, что вы можете рассматривать индексы как указывающие МЕЖДУ элементами.Таким образом, на этом рисунке, если указать срез [1:1], вы фактически ссылаетесь на пробел между H и e, но не включаете их.1012 *, вы бы указали срез [0:2].

...