Я не понимаю разрезание с отрицательными границами в Python. Как это, как предполагается, работает?

Поскольку [...] означает любой из набора символов, а потому, что два символа в группе, разделенные тире, означают диапазон символов (часто «az» или «0-9»), ваш паттерн говорит: косой чертой, за которой следуют любые символы в группе, содержащей x, {, 1, F, 6, 0, 1, диапазон} через x, {, 1, F, 6, 4, f или} ", за которым следует косая черта и буква u ". Этот диапазон в середине - это то, что re вызывает неправильный диапазон символов.

15
задан jtbradle 29 January 2009 в 19:31
поделиться

4 ответа

Да, вызов s[0:-1] является точно тем же как вызовом s[:-1].

Используя отрицательное число, поскольку индекс в Python возвращает энный элемент из правой стороны списка (в противоположность обычной левой стороне).

поэтому, если у Вас есть список как так:

myList = ['a', 'b', 'c', 'd', 'e']
print myList[-1] # prints 'e'

оператор печати распечатает "e".

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

я собираюсь предположить, что Вы понимаете основы части вроде myList[2:4] (который возвратится ['c', 'd']), и перейдите прямо в режущую нотацию, где одна сторона оставлена незаполненная.

, Поскольку Вы подозревали в своем сообщении, myList[:index] точно то же как myList[0:index].

Это - также работы наоборот, между прочим... myList[index:] совпадает с myList[index:len(myList)] и возвратит список всех элементов из списка, запускающегося в index и идущего до конца (например, print myList[2:] распечатает ['c', 'd', 'e']).

Как третье примечание, можно даже сделать print myList[:], где никакой индекс обозначается, который в основном возвратит копию всего списка (эквивалентный [1 113], возвраты ['b', 'c', 'd', 'e']). Это могло бы быть полезно, если Вы думаете, что myList собирается измениться в какой-то момент, но Вы хотите сохранить копию его в ее текущем состоянии.

, Если Вы уже не делаете его, я нахожу просто бездельничание в интерпретаторе Python целый набор большая справка к пониманию этих вещей. Я рекомендую IPython.

35
ответ дан 1 December 2019 в 00:27
поделиться

Критический момент - то, что индексы Python должны считаться указателями на пробелы между записями в списке, а не к самим элементам. Следовательно, 0 точек к началу, 1 к между первым и вторым... и n к между энным и (n+1) Св.

Таким образом l [1:2] дают Вам список, содержащий просто элемент l [1], так как он дает Вам все между этими двумя указателями.

Точно так же отрицательная индексная точка промежуточные элементы, но на этот раз рассчитывая от спины, таким образом-1 точка между последним элементом и предпоследним, таким образом [0:-1] относится к блоку объектов не включая тот последний.

Как синтаксический сахар, можно кончить 0 с начала или, в действительности, конец, таким образом, l [n:] относится ко всему от l [n] в конец (если n> =len (l) затем он возвращает пустой список).

4
ответ дан 1 December 2019 в 00:27
поделиться

Да, вызов s[0:-1] является логически тем же самым как s[:-1], так как разрезание лучше всего определяется как:

[beginning_index:ending_index]

Python позволяет Вам опускать 0, как это позволяет Ваш код более краткому.

1
ответ дан 1 December 2019 в 00:27
поделиться

Отрицательные индексы считаются от конца, таким образом, s [:-1] эквивалентен s [: len (s)-1] и s [-1] является последним элементом, например.

3
ответ дан 1 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: