Найти - Пользователи
Полная версия: Срезы :mid mid:
Начало » Центр помощи » Срезы :mid mid:
1
DeadInside
В первом вызове (: 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)

Объясните, пожалуйста, почему исключается именно элемент справа, а не наоборот?
FishHook
Причин тут можно придумать много и среди них, мне не удалось придумать ни одной технической. То есть какого-то принципиального ограничения нет. Кстати, в некоторых языках границы среза можно задавать как “включая”, так и “не включая”
[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
это интуитивно понятно, а что бы мы получили, если бы границы включались по-другому?

Rafik
Чтобы не путаться, включается или не включается правая граница, запись вида
 a[2:5] 
можно читать так: от a отрезаем пять элементов и читаем отрезанный кусок с позиции два.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB