Исключая последний элемент в индексации на основе 0 - PullRequest
2 голосов
/ 20 декабря 2009

Однажды, когда я читал некоторые документы по Python, я наткнулся на статью, в которой объяснялось, почему языки программирования с индексированием на основе 0 всегда должны исключать последний элемент во время операций, таких как нарезка:Я не закладывал это.Кто-нибудь знает, о какой статье я говорю?

PS: Я приветствую любые объяснения того, почему это для моего немедленного удовлетворения: -)

Ответы [ 6 ]

8 голосов
/ 20 декабря 2009

Может быть эта записка от Е. В. Дейкстры?

5 голосов
/ 20 декабря 2009

Нет, но есть как минимум две веские причины:

  1. a[m:n] дает вам n - m элементов, что позволяет легко рассчитать, сколько элементов вы запрашиваете.
  2. С включенными конечными точками неудобно запрашивать пустой срез (a[3:2]? Yuck).

Редактировать: Я только что подумал о другой специфической для Python причине: [m: -n] исключает первые m и последние n элементов. Если бы это было включено, это исключило бы первые m и последние n -1 пунктов, которые гораздо труднее запомнить.

3 голосов
/ 20 декабря 2009
1 голос
/ 20 декабря 2009

Насколько я знаю, первая обширная обработка в печати была в великой книге Кенига, C Ловушки и ловушки - 20 лет и все еще в печати (на самом деле, в наличии и доставлены сразу из Амазонка! -), довольно дань его природе как классика. К сожалению, в Google Книгах нет его предварительного просмотра, и хотя PDF внутреннего отчета, который сформировал книгу , доступен онлайн , он явно намного короче книги и в частности, в нем не упоминается проблема «открытых диапазонов». Конечно, в Интернете есть пиратские копии, но я не рекомендую скачивать их.

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

1 голос
/ 20 декабря 2009

Я не знаю точно, на какую статью вы ссылаетесь, но Googling полуоткрытые диапазоны должны найти ее для вас. Он нашел этот удивительно хороший , который я считаю новым личным фаворитом.

0 голосов
/ 20 декабря 2009

Не знаю какой-либо конкретной статьи, но я думаю, что логическое обоснование состоит в том, что таким образом вы получаете количество результирующих элементов простым вычитанием, 1-0 = 1, вместо того, чтобы добавлять туда 1 (что вы забудете в любом случае половину времени).

...