Что означает? - PullRequest
       25

Что означает?

82 голосов
/ 29 мая 2011

Я анализирую некоторый код Python и не знаю, что означает

pop = population[:]

.Это что-то вроде списков массивов в Java или двумерный массив?

Ответы [ 6 ]

100 голосов
/ 29 мая 2011

Это нарезка, и то, что она делает, зависит от типа population. Если population является списком, эта строка создаст копию списка. Для объекта типа tuple или str он ничего не сделает (строка будет делать то же самое без [:]), а для (скажем) массива NumPy создаст новое представление для тех же данных .

26 голосов
/ 29 мая 2011

Также может быть полезно знать, что фрагмент списка в общем случае является копией части списка. Например. population[2:4] вернет список, содержащий совокупность [2] и совокупность [3] (срезы исключают право). Оставляя левый и правый индексы, как в population[:], они по умолчанию равны 0 и длине (населению) соответственно, таким образом выбирая весь список. Следовательно, это обычная идиома для создания копии списка.

14 голосов
/ 14 февраля 2013

ну ... это действительно зависит от контекста.В конечном итоге он передает объект slice (slice(None,None,None)) одному из следующих методов: __getitem__, __setitem__ или __delitem__.(На самом деле, если объект имеет __getslice__, он будет использоваться вместо __getitem__, но теперь он не рекомендуется и не должен использоваться).

Объекты могут делать с ломтиком то, что они хотят.

В контексте:

x = obj[:]

Это вызовет obj.__getitem__ с переданным объектом слайса. Фактически, это полностью эквивалентно:

x = obj[slice(None,None,None)]

(хотя первый, вероятно, более эффективен, потому что ему не нужно искать конструктор slice - все это делается в байт-коде).

Для большинства объектов это способ создания поверхностного объекта.копия части последовательности.

Далее:

x[:] = obj

Способ установки элементов (он вызывает __setitem__) на основе obj.

и, я думаю, вы, вероятно, можете догадаться, что:

del x[:]

вызывает; -).

Вы также можете передавать различные фрагменты:

x[1:4]

конструкции slice(1,4,None)

x[::-1]

, конструкции slice(None,None,-1) и так далее.Дополнительное чтение: Объясните обозначение среза Python

9 голосов
/ 29 мая 2011

Это срез от начала последовательности до конца, обычно производящий мелкую копию.

(Ну, это больше, чем , новам пока не нужно заботиться.)

6 голосов
/ 29 мая 2011

Создает копию списка, а не просто присваивает новое имя уже существующему списку.

5 голосов
/ 03 июля 2013

[:]
используется для лимитера или среза в массиве, хэш
например:
[1: 5] для отображения значений от 1 включительно до 5 исключительных, т.е. 1-4
[start:end]

в основном используется в массиве для нарезки, понимает переменную принятия скобок, которая означает среднее значение или ключ для отображения, а ":" используется для ограничения или разбиения всего массива на пакеты.

...