Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2019 18:40:49

DeadInside
Зарегистрирован: 2019-04-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Срезы :mid mid:

В первом вызове (: mid) выведутся все элементы до mid (не включая сам mid). Во втором все, начиная с mid, до конца.

 def mergesorts(arr):
    if len(arr) < 2:
        return arr
    mid = int(len(arr)/2)
    array_left = mergesorts(arr[:mid])
    array_right = mergesorts(arr[mid:])
    return merge(array_left, array_right)

Объясните, пожалуйста, почему исключается именно элемент справа, а не наоборот?

Отредактировано DeadInside (Апрель 2, 2019 18:49:17)

Офлайн

#2 Апрель 3, 2019 06:25:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Срезы :mid mid:

Причин тут можно придумать много и среди них, мне не удалось придумать ни одной технической. То есть какого-то принципиального ограничения нет. Кстати, в некоторых языках границы среза можно задавать как “включая”, так и “не включая”

[a:b]  # include reft & right borders
(a:b] # include right border
[a:b) # include left border

Во-первых, синтаксис не включающий правую границу интуитивно понятнее
a[3:5]
вы не задумываясь понимаете, что в срез попадут два элемента 5-3=2. Если бы правая граница включалась, элементов в срезе было бы три, что контринтуитивно.

Во-вторых, если не включать левую границу, то чтобы получить срез включающий нулевой элемент, мы должны были бы использовать отрицательные индексы.
[-1:3]
Но отрицательные индексы уже используются для указания отсчета с конца.

В-третьих, вы сами же выше и показали полезный юз-кейс
a[:n] + a[n:] == a
это интуитивно понятно, а что бы мы получили, если бы границы включались по-другому?



Офлайн

#3 Апрель 3, 2019 21:12:19

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Срезы :mid mid:

Чтобы не путаться, включается или не включается правая граница, запись вида

 a[2:5] 
можно читать так: от a отрезаем пять элементов и читаем отрезанный кусок с позиции два.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version