#Gromov
Мастер
Иллюстрируют особенности индексации элементов и срезов: при взятии среза нумеруются не сами элементы, а промежутки между ними.
Функции подобные range() поддерживают то же правило (для версий языка 2.x):
Генерация коллекций:
PHP:
>>> l = ['A', 'B', 'C', 'D', 'E'] # исходный список
>>> # 0 1 2 3 4 5 # пронумерованные промежутки между элементами
>>> # -5 -4 -3 -2 -1 # нумерация с конца
>>> l[0:2] # срез от нулевого до второго промежутка
['A', 'B']
>>> l[1:-2] # срез от второго до второго с конца элемента
['B','C']
>>> l[1::2] # каждый второй элемент начиная с первого
['B', 'D']
>>> l[::-1] # все элементы в обратном порядке
['E', 'D', 'C', 'B', 'A']
PHP:
>>> range(2, 5)
[2, 3, 4]
>>> range(5)
[0, 1, 2, 3, 4]
Генерация коллекций:
PHP:
>>> [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> [ i for i in range(5) if i%2==0]
[0, 2, 4]
