что значит кто идет раньше :: нравится [5::]. Так что же значит 5?
Умар Асгар
1
[5 ::] означало бы начинать с первого элемента, ничего для второго, и выбирать следующий элемент
Gagan
Ответы:
243
это означает «ничего для первого аргумента, ничего для второго и скачок на три». Он получает каждый третий элемент последовательности.
Расширенные ломтики - это то, что вы хотите. Новое в Python 2.3
Он возвращает каждый элемент на позиции, кратной 3 . Так как 3 * 0 = 0, он также возвращает элемент в позиции 0. Например: range(10)[::3]выходы[0, 3, 6, 9]
Рикки Робинсон
1
что значит кто раньше придет ::как [n ::]. Так что это значит n?
Умар Асгар
154
Адреса фрагментов последовательности Python могут быть записаны как [start: end: step], и любой из start, stop или end может быть отброшен. a[::3]каждый третий элемент последовательности.
В Python 3 ваш пример range (N) [:: step] создает объект диапазона, а не список. Чтобы действительно увидеть, что происходит, вам нужно привести диапазон в список, np.array и т. Д.
PikalaxALT
57
объяснение
s[i:j:k]в соответствии с документацией , «срез от s до i с шагом k». Когда iи jотсутствуют, предполагается вся последовательность и, следовательно, s[::k]означает «каждый k-й элемент».
Примеры
Сначала давайте инициализируем список:
>>> s = range(20)>>> s
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
Этот визуальный пример покажет вам, как аккуратно выбирать элементы в матрице NumPy (двумерный массив) довольно интересным способом (обещаю). Шаг 2 ниже иллюстрирует использование этих "двойных двоеточий" ::в вопросе.
(Предостережение: это конкретный пример массива NumPy с целью иллюстрации варианта использования «двойных двоеточий» ::для прыжков элементов по нескольким осям. Этот пример не охватывает подобные структуры данных Python, такие как List).
Один конкретный пример, чтобы управлять ими всеми ...
Скажем, у нас есть матрица NumPy, которая выглядит следующим образом:
In[1]:import numpy as np
In[2]: X = np.arange(100).reshape(10,10)In[3]: X
Out[3]:
array([[0,1,2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17,18,19],[20,21,22,23,24,25,26,27,28,29],[30,31,32,33,34,35,36,37,38,39],[40,41,42,43,44,45,46,47,48,49],[50,51,52,53,54,55,56,57,58,59],[60,61,62,63,64,65,66,67,68,69],[70,71,72,73,74,75,76,77,78,79],[80,81,82,83,84,85,86,87,88,89],[90,91,92,93,94,95,96,97,98,99]])
Скажем, по какой-то причине ваш босс хочет, чтобы вы выбрали следующие элементы:
"Но как ???" ... Читайте дальше! (Мы можем сделать это в два этапа)
Шаг 1 - Получить подмножество
Укажите «начальный индекс» и «конечный индекс» как по строкам, так и по столбцам.
Обратите внимание, что мы только что получили наше подмножество, используя простую технику индексации начала и конца. Далее, как сделать этот «прыжок» ... (читай дальше!)
Шаг 2 - Выберите элементы (с аргументом «шаг перехода»)
Теперь мы можем указать «шаги прыжка» как в строчном, так и в столбцовом направлении (чтобы выбрать элементы «прыжковым» способом) следующим образом:
Что, если я хочу установить каждую из этих отмеченных записей на 0 в исходном объекте? Как действовать?
user1211030
1
Сделайте X[2:9,3:8][::3,::2] = 0 (чтобы заменить отмеченные записи на 0). Если вы напечатаете Xснова, вы увидите, что все отмеченные записи теперь установлены на 0.
Atlas7
15
При нарезке в Python третьим параметром является шаг. Как уже упоминалось, посмотрите Расширенные ломтики для хорошего обзора.
С этим знанием [::3]просто означает, что вы не указали никаких начальных или конечных индексов для своего среза. Поскольку вы указали шаг, 3он будет принимать каждую третью запись, somethingначиная с первого индекса. Например:
Вы также можете использовать эту нотацию в своих собственных классах, чтобы заставить ее делать все, что вы хотите
class C(object):def __getitem__(self, k):return k
# Single argument is passed directly.assert C()[0]==0# Multiple indices generate a tuple.assert C()[0,1]==(0,1)# Slice notation generates a slice object.assert C()[1:2:3]== slice(1,2,3)# If you omit any part of the slice notation, it becomes None.assert C()[:]== slice(None,None,None)assert C()[::]== slice(None,None,None)assert C()[1::]== slice(1,None,None)assert C()[:2:]== slice(None,2,None)assert C()[::3]== slice(None,None,3)# Tuple with a slice object:assert C()[:,1]==(slice(None,None,None),1)# Ellipsis class object.assert C()[...]==Ellipsis
Затем мы можем открыть объекты среза как:
s = slice(1,2,3)assert s.start ==1assert s.stop ==2assert s.step ==3
Это особенно используется в Numpy для нарезки многомерных массивов в любом направлении.
Конечно, любой вменяемый API должен использовать ::3обычную семантику «каждые 3».
[5::]
. Так что же значит 5?Ответы:
это означает «ничего для первого аргумента, ничего для второго и скачок на три». Он получает каждый третий элемент последовательности. Расширенные ломтики - это то, что вы хотите. Новое в Python 2.3
источник
range(10)[::3]
выходы[0, 3, 6, 9]
::
как [n ::]. Так что это значитn
?Адреса фрагментов последовательности Python могут быть записаны как [start: end: step], и любой из start, stop или end может быть отброшен.
a[::3]
каждый третий элемент последовательности.источник
seq[::n]
является последовательностью каждого-гоn
элемента во всей последовательности.Пример:
Синтаксис:
Так что вы можете сделать:
источник
объяснение
s[i:j:k]
в соответствии с документацией , «срез от s до i с шагом k». Когдаi
иj
отсутствуют, предполагается вся последовательность и, следовательно,s[::k]
означает «каждый k-й элемент».Примеры
Сначала давайте инициализируем список:
Давайте возьмем каждый 3- й предмет из
s
:Давайте возьмем каждый 3- й предмет из
s[2:]
:Давайте возьмем каждый 3- й предмет из
s[5:12]
:Давайте возьмем каждый 3- й предмет из
s[:10]
:источник
TL; DR
Этот визуальный пример покажет вам, как аккуратно выбирать элементы в матрице NumPy (двумерный массив) довольно интересным способом (обещаю). Шаг 2 ниже иллюстрирует использование этих "двойных двоеточий"
::
в вопросе.(Предостережение: это конкретный пример массива NumPy с целью иллюстрации варианта использования «двойных двоеточий»
::
для прыжков элементов по нескольким осям. Этот пример не охватывает подобные структуры данных Python, такие какList
).Один конкретный пример, чтобы управлять ими всеми ...
Скажем, у нас есть матрица NumPy, которая выглядит следующим образом:
Скажем, по какой-то причине ваш босс хочет, чтобы вы выбрали следующие элементы:
"Но как ???" ... Читайте дальше! (Мы можем сделать это в два этапа)
Шаг 1 - Получить подмножество
Укажите «начальный индекс» и «конечный индекс» как по строкам, так и по столбцам.
В коде:
Обратите внимание, что мы только что получили наше подмножество, используя простую технику индексации начала и конца. Далее, как сделать этот «прыжок» ... (читай дальше!)
Шаг 2 - Выберите элементы (с аргументом «шаг перехода»)
Теперь мы можем указать «шаги прыжка» как в строчном, так и в столбцовом направлении (чтобы выбрать элементы «прыжковым» способом) следующим образом:
В коде (обратите внимание на двойные двоеточия):
Мы только что выбрали все элементы по мере необходимости! :)
Объедините Шаг 1 (начало и конец) и Шаг 2 («прыжок»)
Теперь, когда мы знаем концепцию, мы можем легко объединить шаг 1 и шаг 2 в один объединенный шаг - для компактности:
Готово!
источник
X[2:9,3:8][::3,::2] = 0
(чтобы заменить отмеченные записи на 0). Если вы напечатаетеX
снова, вы увидите, что все отмеченные записи теперь установлены на0
.При нарезке в Python третьим параметром является шаг. Как уже упоминалось, посмотрите Расширенные ломтики для хорошего обзора.
С этим знанием
[::3]
просто означает, что вы не указали никаких начальных или конечных индексов для своего среза. Поскольку вы указали шаг,3
он будет принимать каждую третью запись,something
начиная с первого индекса. Например:источник
Вы также можете использовать эту нотацию в своих собственных классах, чтобы заставить ее делать все, что вы хотите
Затем мы можем открыть объекты среза как:
Это особенно используется в Numpy для нарезки многомерных массивов в любом направлении.
Конечно, любой вменяемый API должен использовать
::3
обычную семантику «каждые 3».Более подробно об этом говорится в разделе
Ellipsis
: Что делает объект Ellipsis?источник
Третий параметр - это шаг. Так что [:: 3] будет возвращать каждый третий элемент списка / строки.
источник
Python использует :: для разделения значений End, Start и Step.
источник