- Разбираемся с путаницей между JavaScript методами slice(), splice() и split()
- JavaScript массивы
- slice()
- splice()
- Удаление элементов
- Добавление элементов
- split()
- Подводим итоги
- Slice()
- Splice()
- Split()
- Email подписка!
- Python: коллекции, часть 2/4: индексирование, срезы, сортировка
- ОГЛАВЛЕНИЕ:
- 1. Индексирование
- 1.1 Индексированные коллекции
- 1.2 Получение значения по индексу
- 1.3 Изменение элемента списка по индексу
- 2 Срезы
- 2.1 Синтаксис среза
- Особенности среза:
- Примеры срезов в виде таблицы:
- 2.2. Именованные срезы
- 2.3 Изменение списка срезом
- Проиллюстрируем это на примерах ниже:
- 2.4 Выход за границы индекса
- 3 Сортировка элементов коллекции
- 3.1 Функция sorted()
- 3.2 Функция reversed()
- 3.4 Особенности сортировки словаря
- UPD от ShashkovS: 3.5 Дополнительная информация по использованию параметра key при сортировке
- UPD от ShashkovS: 3.6 Устойчивость сортировки
- Понимание обозначения среза
- ОТВЕТЫ
- Ответ 1
- Отношение к объекту slice()
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Объяснить нотацию фрагмента Python
- Важные определения
- Как работает индексирование
- Как работает нарезка
- Объяснение:
- Когда step отрицательный, значения по умолчанию для start и stop изменения
- Подтверждение этого в источнике
- Дайте своим фрагментам описательное имя!
- Вопросы памяти:
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- 1. Обозначение среза
- 2. Подводные камни
- Отрицательные показатели
- Отрицательный шаг
- Ошибка вне диапазона?
- 3. Примеры
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
- Ответ 25
- Ответ 26
- Ответ 27
- Ответ 28
- Ответ 29
- Ответ 30
Разбираемся с путаницей между JavaScript методами slice(), splice() и split()
Я настоятельно рекомендую студентам и джуниорам читать эту статью внимательно, потому что эти три метода могут быть включены в процесс собеседования.
Вы найдете обобщенные описания методов в конце статьи. Ну а теперь давайте начнем.
JavaScript массивы
Во первых, вам необходимо понять как работают массивы в JavaScript. Как и в других языках программирования, мы используем массивы для хранения разнообразных данных в JS.
А теперь давайте объявим ещё один массив с разными типами данных. Ниже, в своих примерах, я буду использовать именно его :
Такое возможно в JavaScript. Массив с разными типами данных: строка, число и булево значение.
slice()
Метод slice() копирует заданную часть массива и возвращает её в виде совершенно нового массива. Этот метод вообще не трогает оригинальный массив:
From: с индекса какого элемента начинается нарезка массива
Until: до какого элемента массива нарезается массив
Для примера, нам нужно нарезать первые три элемента из вышеуказанного массива. Так как первый элемент в массиве всегда имеет индекс 0, то начнём мы нарезку именно с него.
Это может создать некое недопонимание. Именно по этому я назвал второй параметр until (до).
Важное замечание: метод slice() также можно использовать и на строках.
splice()
Удаление элементов
Для их удаления нам надо задать параметр index и число элементов, которые будут удалены:
Тут index — это начальная точка для удаления элементов. Элементы, которые имеют индекс ниже заданного не будут удалены:
После 1-го вызова:
После 2-го вызова:
В общем, это будет продолжаться пока вообще не останется элементов под индексом 2.
Добавление элементов
Для добавления элементов нам нужно указать 3, 4 и 5й параметры (в зависимости от того, сколько мы хотим добавить) методу splice() :
Как пример, я добавляю a и b в самое начала массива, при этом ничего не удаляя:
split()
Методы slice() и splice() для массивов. А вот метод split() используется для строк. Он делит строку на подстроки и отдаёт их в виде массива. Ему нужны 2 параметра и оба они опциональны.
Separator: определяет как разделять строку. Запятой, символом или тп.
Limits: ограничивает количество разделений, опираясь на заданное число.
Давайте посмотрим как это работает.
Сначала мы конвертируем наш массив в строку при помощи метода toString() :
Теперь давайте разделим myString по запятым, ограничив его до 3 подстрок и возвратим его, как массив:
Как мы видим, myString разделен запятыми. А так как мы ограничиваем разбитие строки до 3-х элементов в массиве, то только первые 3 из них будут возвращены.
Подводим итоги
Slice()
Splice()
Split()
Конечно же есть и другие встроенные JavaScript методы для работы с массивами и строками. Если вы поймете как их использовать, то они значительно упростят ваш процесс разработки.
Email подписка!
Python: коллекции, часть 2/4: индексирование, срезы, сортировка
Часть 1 | Часть 2 | Часть 3 | Часть 4 |
---|
Данная статья является продолжением моей статьи «Python: коллекции, часть 1: классификация, общие подходы и методы, конвертация».
В данной статье мы продолжим изучать общие принципы работы со стандартными коллекциями (модуль collections в ней не рассматривается) Python.
Для кого: для изучающих Python и уже имеющих начальное представление о коллекциях и работе с ними, желающих систематизировать и углубить свои знания, сложить их в целостную картину.
ОГЛАВЛЕНИЕ:
1. Индексирование
1.1 Индексированные коллекции
Рассмотрим индексированные коллекции (их еще называют последовательности — sequences) — список (list), кортеж (tuple), строку (string).
Под индексированностью имеется ввиду, что элементы коллекции располагаются в определённом порядке, каждый элемент имеет свой индекс от 0 (то есть первый по счёту элемент имеет индекс не 1, а 0) до индекса на единицу меньшего длины коллекции (т.е. len(mycollection)-1).
1.2 Получение значения по индексу
Для всех индексированных коллекций можно получить значение элемента по его индексу в квадратных скобках. Причем, можно задавать отрицательный индекс, это значит, что будем находить элемент с конца считая обратном порядке.
1.3 Изменение элемента списка по индексу
Поскольку кортежи и строки у нас неизменяемые коллекции, то по индексу мы можем только брать элементы, но не менять их:
А вот для списка, если взятие элемента по индексу располагается в левой части выражения, а далее идёт оператор присваивания =, то мы задаём новое значение элементу с этим индексом.
UPD: Примечание: Для такого присвоения, элемент уже должен существовать в списке, нельзя таким образом добавить элемент на несуществующий индекс.
2 Срезы
2.1 Синтаксис среза
Очень часто, надо получить не один какой-то элемент, а некоторый их набор ограниченный определенными простыми правилами — например первые 5 или последние три, или каждый второй элемент — в таких задачах, вместо перебора в цикле намного удобнее использовать так называемый срез (slice, slicing).
Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.
Синтаксис среза похож на таковой для индексации, но в квадратных скобках вместо одного значения указывается 2-3 через двоеточие:
Особенности среза:
Поэтому, например, mylist[::-1] не идентично mylist[:0:-1], так как в первом случае мы включим все элементы, а во втором дойдем до 0 индекса, но не включим его!
Примеры срезов в виде таблицы:
2.2. Именованные срезы
Чтобы избавится от «магических констант», особенно в случае, когда один и тот же срез надо применять многократно, можно задать константы с именованными срезами с пользованием специальной функции slice()()
Примечание: Nonе соответствует опущенному значению по-умолчанию. То есть [:2] становится slice(None, 2), а [1::2] становится slice(1, None, 2).
2.3 Изменение списка срезом
Важный момент, на котором не всегда заостряется внимание — с помощью среза можно не только получать копию коллекции, но в случае списка можно также менять значения элементов, удалять и добавлять новые.
Проиллюстрируем это на примерах ниже:
2.4 Выход за границы индекса
Обращение по индексу по сути является частным случаем среза, когда мы обращаемся только к одному элементу, а не диапазону. Но есть очень важное отличие в обработке ситуации с отсутствующим элементом с искомым индексом.
Обращение к несуществующему индексу коллекции вызывает ошибку:
А в случае выхода границ среза за границы коллекции никакой ошибки не происходит:
Примечание: Для тех случаев, когда функционала срезов недостаточно и требуются более сложные выборки, можно воспользоваться синтаксисом выражений-генераторов, рассмотрению которых посвещена 4 статья цикла.
3 Сортировка элементов коллекции
Сортировка элементов коллекции важная и востребованная функция, постоянно встречающаяся в обычных задачах. Тут есть несколько особенностей, на которых не всегда заостряется внимание, но которые очень важны.
3.1 Функция sorted()
Мы может использовать функцию sorted() для вывода списка сортированных элементов любой коллекции для последующее обработки или вывода.
Пример сортировки списка строк по длине len() каждого элемента:
3.2 Функция reversed()
Функция reversed() применяется для последовательностей и работает по другому:
Обратите внимание: Частая ошибка начинающих, которая не является ошибкой для интерпретатора, но приводит не к тому результату, который хотят получить.
3.4 Особенности сортировки словаря
В сортировке словаря есть свои особенности, вызванные тем, что элемент словаря — это пара ключ: значение.
UPD: Так же, не забываем, что говоря о сортировке словаря, мы имеем ввиду сортировку полученных из словаря данных для вывода или сохранения в индексированную коллекцию. Сохранить данные сортированными в самом стандартном словаре не получится, они в нем, как и других неиндексированных коллекциях находятся в произвольном порядке.
Отдельные сложности может вызвать сортировка словаря не по ключам, а по значениям, если нам не просто нужен список значений, и именно выводить пары в порядке сортировки по значению.
Для решения этой задачи можно в качестве специальной функции сортировки передавать lambda-функцию lambda x: x[1] которая из получаемых на каждом этапе кортежей (ключ, значение) будет брать для сортировки второй элемент кортежа.
UPD от ShashkovS: 3.5 Дополнительная информация по использованию параметра key при сортировке
Допустим, у нас есть список кортежей названий деталей и их стоимостей.
Нам нужно отсортировать его сначала по названию деталей, а одинаковые детали по убыванию цены.
Перед тем, как сравнивать два элемента списка к ним применялась функция prepare_item, которая меняла знак у стоимости (функция применяется ровно по одному разу к каждому элементу. В результате при одинаковом первом значении сортировка по второму происходила в обратном порядке.
Чтобы не плодить утилитарные функции, вместо использования сторонней функции, того же эффекта можно добиться с использованием лямбда-функции.
UPD от ShashkovS: 3.6 Устойчивость сортировки
Допустим данные нужно отсортировать сначала по столбцу А по возрастанию, затем по столбцу B по убыванию, и наконец по столбцу C снова по возрастанию.
Если данные в столбце B числовые, то при помощи подходящей функции в key можно поменять знак у элементов B, что приведёт к необходимому результату.
А если все данные текстовые? Тут есть такая возможность.
Дело в том, что сортировка sort в Python устойчивая (начиная с Python 2.2), то есть она не меняет порядок «одинаковых» элементов.
Поэтому можно просто отсортировать три раза по разным ключам:
Понимание обозначения среза
Для меня эта нотация требует немного поднять.
Он выглядит чрезвычайно мощным, но я не совсем обнял его.
ОТВЕТЫ
Ответ 1
Это довольно просто на самом деле:
Ключевой момент, который следует помнить, заключается в том, что значение :stop представляет первое значение, которого нет в выбранном срезе. Таким образом, разница между stop и start заключается в количестве выбранных элементов (если step равен 1, по умолчанию).
Другая особенность заключается в том, что start или stop могут быть отрицательным числом, что означает, что они считаются с конца массива, а не с начала. Так:
Аналогично, step может быть отрицательным числом:
Python добр к программисту, если в нем меньше элементов, чем вы просите. Например, если вы запрашиваете a[:-2] и a содержит только один элемент, вместо ошибки вы получите пустой список. Иногда вы предпочитаете ошибку, поэтому вы должны знать, что это может произойти.
Отношение к объекту slice()
Оператор среза [] фактически используется в приведенном выше коде с объектом slice() с использованием нотации : (которая действительна только в [] ), то есть:
Ответ 2
Python tutorial говорит об этом (прокрутите немного вниз, пока не дойдете до части, касающейся нарезки).
Диаграмма искусства ASCII также полезна для запоминания того, как работают срезы:
Ответ 3
Перечисляя возможности, допускаемые грамматикой:
Если stride отрицательный, порядок немного меняется, так как мы ведем обратный отсчет:
Расширенные срезы (с запятыми и эллипсами) в основном используются только специальными структурами данных (например, NumPy); основные последовательности не поддерживают их.
Ответ 4
Ответы выше не обсуждают назначение срезов. Чтобы понять назначение срезов, полезно добавить еще одну концепцию в искусство ASCII:
Другая эвристика: «для любого среза замените начало на ноль, примените предыдущую эвристику, чтобы получить конец списка, а затем сосчитайте первое число обратно, чтобы отрезать элементы от начала».
Первое правило назначения срезов состоит в том, что, поскольку срезы возвращают список, для назначения срезов требуется список (или другие итерируемые):
Второе правило назначения слайсов, которое вы также можете видеть выше, заключается в том, что любая часть списка, возвращаемая при индексации слайсов, совпадает с той частью, которая изменяется при назначении слайсов:
Третье правило назначения слайсов состоит в том, что назначенный список (повторяемый) не должен иметь одинаковую длину; Индексированный фрагмент просто вырезается и заменяется массово тем, что ему назначено:
И затем, как только вы это увидели, назначение слайса пустому слайсу также имеет смысл:
Обратите внимание, что, поскольку мы не меняем второе число среза (4), вставленные элементы всегда располагаются прямо напротив «o», даже когда мы назначаем пустой срез. Таким образом, позиция для пустого назначения слайса является логическим расширением позиций для непустых назначений слайса.
Немного резервного копирования, что произойдет, если вы продолжите нашу процессию подсчета начала среза?
С нарезкой, как только вы закончите, вы закончите; это не начинает разрезать назад. В Python вы не получите отрицательных шагов, если вы явно не попросите их, используя отрицательное число.
Есть несколько странных последствий для правила «как только вы закончите, вы закончите»:
Фактически, по сравнению с индексированием, нарезка Python причудливо защищена от ошибок:
Иногда это может пригодиться, но может привести к несколько странному поведению:
В зависимости от вашего приложения это может. или не может. быть тем, на что вы надеялись!
Ниже приведен текст моего оригинального ответа. Это было полезно для многих людей, поэтому я не хотел его удалять.
Это также может прояснить разницу между нарезкой и индексацией.
Ответ 5
Объяснить нотацию фрагмента Python
Важные определения
Для начала определим несколько терминов:
start: начальный индекс среза, он будет включать элемент в этот индекс, если он не будет таким же, как stop, по умолчанию 0, то есть первый индекс. Если он отрицательный, это означает, что нужно начинать n элементов с конца.
stop: конечный индекс среза, он не включает элемент в этот индекс, по умолчанию длина фрагментированной последовательности, то есть до и включая конец.
step: количество, на которое увеличивается индекс, по умолчанию равно 1. Если оно отрицательное, вы нарезаете итерабельность в обратном порядке.
Как работает индексирование
Вы можете сделать любое из этих положительных или отрицательных чисел. Значение положительных чисел является простым, но для отрицательных чисел, точно так же, как индексы в Python, вы отсчитываете назад от конца для начала и остановки, а для этого шага вы просто уменьшаете свой индекс. Этот пример из учебника документации, но я немного изменил его, чтобы указать, какой элемент в последовательности ссылается на каждый индекс:
Как работает нарезка
Чтобы использовать нотацию фрагмента с последовательностью, которая ее поддерживает, вы должны включить по крайней мере один двоеточие в квадратные скобки, которые следуют за последовательностью (которые фактически реализуют метод __getitem__ последовательности, в соответствии с моделью данных Python).
Обозначение фрагментов работает следующим образом:
И помните, что есть значения по умолчанию для начала, остановки и шага, поэтому для доступа к значениям по умолчанию просто оставьте аргумент.
Обозначение фрагмента для получения последних девяти элементов из списка (или любой другой последовательности, поддерживающей его, как строка) будет выглядеть так:
Когда я вижу это, я читаю часть в скобках как «9-е с конца, до конца». (На самом деле я мысленно сокращаю его как «-9, on»)
Объяснение:
Когда step отрицательный, значения по умолчанию для start и stop изменения
Но вы можете передать отрицательное целое число, и список (или большинство других стандартных slicables) будет разрезан с конца до начала.
Подтверждение этого в источнике
Мне нравится поощрять пользователей читать источник, а также документацию. Исходный код для объектов среза и эта логика находятся здесь. Сначала мы определяем, является ли step отрицательным:
В противном случае step положителен, а нижняя граница будет равна нулю, а верхняя граница (на которую мы переходим, но не включаем) длину нарезанного списка.
Дайте своим фрагментам описательное имя!
Вы можете счесть полезным отделить формирование среза от его передачи в list.__getitem__ method (то, что делают квадратные скобки). Даже если вы не новичок в этом, он сохраняет ваш код более читабельным, так что другие, которые могут читать ваш код, могут более легко понять, что вы делаете.
Однако вы не можете просто назначить переменную целые числа, разделенные двоеточиями. Вам нужно использовать объект среза:
Затем вы можете передать объект среза в свою последовательность:
Интересно, что диапазоны также занимают кусочки:
Вопросы памяти:
Тот факт, что список фрагментов создает копию, является особенностью самих списков. Если вы перерезаете продвинутые объекты, такие как Pandas DataFrame, он может вернуть представление на оригинале, а не на копию.
Ответ 6
И несколько вещей, которые не были сразу очевидны для меня, когда я впервые увидел синтаксис разрезания:
Легкий способ изменения последовательностей!
И если вы хотите, по какой-то причине, каждый второй элемент в обратной последовательности:
Ответ 7
Очень важно понимать назначение индекса.
Когда вы говорите [a: b: c], вы говорите в зависимости от знака c (вперед или назад), начинайте с a и заканчивая на b (исключая элемент в bth-индексе). Используйте правило индексирования выше и помните, что вы найдете только элементы в этом диапазоне:
Но этот диапазон продолжается в обоих направлениях бесконечно:
Если ваш выбор a, b и c позволяет перекрываться с диапазоном выше, когда вы проходите с использованием правил для a, b, c выше, вы либо получите список с элементами (затронутыми во время обхода), либо вы получите пустой список.
Последнее: если a и b равны, то вы также получаете пустой список:
Ответ 8
Ответ 9
Любые из них являются необязательными:
Тогда для отрицательного индексирования вам просто нужно добавить длину строки к отрицательным индексам, чтобы понять это.
В любом случае это работает для меня.
Ответ 10
Мне легче вспомнить, как это работает, и затем я могу определить любую конкретную комбинацию старт/стоп/шаг.
Поучительно сначала понять range() :
Секвенция секвенции такая же, за исключением того, что сначала она нормализует отрицательные индексы и никогда не может выходить за пределы последовательности:
TODO: В приведенном ниже коде была ошибка «никогда не выходить за пределы последовательности», когда abs (step)> 1; Я думаю, что я исправил это, чтобы быть правильным, но это трудно понять.
Ответ 11
Надеюсь, это поможет вам смоделировать список в Python.
Ответ 12
Я использую метод «указательные точки между элементами», думая об этом сам, но один способ описать его, который иногда помогает другим получить это, это:
Ответ 13
Обозначение разреза Python:
Обозначение распространяется на (numpy) матрицы и многомерные массивы. Например, чтобы разрезать целые столбцы, вы можете использовать:
Ответ 14
Вы также можете использовать назначение slice для удаления одного или нескольких элементов из списка:
Ответ 15
Вот как я преподаю ломтики новичкам:
Понимание разницы между индексированием и нарезкой:
В Wiki Python есть удивительная картина, которая четко различает индексацию и нарезку.
Это список из шести элементов. Чтобы лучше понять нарезку, рассмотрите этот список как набор из шести блоков, помещенных вместе. В каждой коробке есть алфавит.
Индексирование похоже на работу с содержимым коробки. Вы можете проверить содержимое любого ящика. Но вы не можете проверить содержимое нескольких ящиков одновременно. Вы даже можете заменить содержимое коробки. Но вы не можете поместить два шара в одну коробку или заменить два шара одновременно.
Нарезка подобна работе с самими коробками. Вы можете взять первую коробку и поставить ее на другой стол. Чтобы поднять коробку, вам нужно знать только положение начала и конца коробки.
Вы можете даже выбрать первые три блока или последние два блока или все блоки от 1 до 4. Таким образом, вы можете выбрать любой набор блоков, если вы знаете начало и конец. Эти позиции называются начальной и конечной позициями.
Интересно то, что вы можете заменить несколько коробок одновременно. Также вы можете разместить несколько ящиков где угодно.
Нарезка с шагом:
До сих пор вы постоянно выбирали коробки. Но иногда нужно подобрать дискретно. Например, вы можете подобрать каждую вторую коробку. Вы можете даже забрать каждую третью коробку с конца. Это значение называется размером шага. Это представляет разрыв между вашими последующими пикапами. Размер шага должен быть положительным, если вы выбираете поля от начала до конца и наоборот.
Как Python определяет недостающие параметры:
При нарезке, если вы пропустите какой-либо параметр, Python попытается выяснить это автоматически.
Если вы проверите исходный код CPython, вы найдете функцию PySlice_GetIndicesEx(), которая вычисляет индексы для среза для любых заданных параметров. Вот логический эквивалентный код в Python.
Эта функция принимает объект Python и необязательные параметры для нарезки и возвращает начало, конец, шаг и длину среза для запрошенного среза.
Это интеллект, который присутствует за кусочками. Поскольку в Python есть встроенная функция slice, вы можете передать некоторые параметры и проверить, насколько разумно он рассчитывает отсутствующие параметры.
Примечание. Первоначально этот пост был написан в моем блоге Интеллект за кусочками Python.
Ответ 16
Это просто для дополнительной информации. Рассмотрим список ниже
Несколько других приемов для изменения списка:
Ответ 17
Как правило, при написании кода с большим количеством жестко заданных значений индекса читаемость и обслуживание беспорядок. Например, если вы вернетесь к коду через год, вы будете взгляните на него и задайтесь вопросом, что вы думаете, когда вы его написали. Показанное решение это просто способ более четко указать, что делает ваш код на самом деле. В общем, встроенный slice() создает объект среза, который можно использовать в любом месте среза позволено. Например:
Если у вас есть экземпляр среза, вы можете получить дополнительную информацию об этом, посмотрев его s.start, s.stop и s.step соответственно. Например:
Ответ 18
1. Обозначение среза
Чтобы упростить задачу, помните, что срез имеет только одну форму :
и вот как это работает:
2. Подводные камни
Вышеприведенная часть объясняет основные особенности того, как работает слайс, и он будет работать в большинстве случаев. Однако могут быть подводные камни, о которых следует помнить, и эта часть объясняет их.
Отрицательные показатели
Самое первое, что смущает изучающих Python, это то, что индекс может быть отрицательным! Не паникуйте: отрицательный индекс означает обратный отсчет.
Отрицательный шаг
Более запутанным является то, что step также может быть отрицательным!
Отрицательный шаг означает итерацию массива в обратном направлении: от конца к началу с включенным индексом конца и исключением индекса результата из результата.
Ошибка вне диапазона?
Будьте удивлены: слайс не вызывает ошибку IndexError, когда индекс выходит за пределы диапазона!
Если индекс выходит за пределы диапазона, Python будет стараться изо всех сил установить индекс 0 или len(s) в зависимости от ситуации. Например:
3. Примеры
Позвольте закончить этот ответ примерами, объясняющими все, что мы обсуждали:
Ответ 19
В предыдущих ответах не обсуждается нарезка многомерных массивов, что возможно при использовании известного пакета NumPy :
Нарезку также можно применять к многомерным массивам.
» :2 » перед запятой действует в первом измерении и » 0:3:2 » после запятой работает во втором измерении.
Ответ 20
Вы можете запустить этот script и поэкспериментировать с ним, ниже приведены некоторые образцы, которые я получил из script.
При использовании отрицательного шага обратите внимание, что ответ сдвигается вправо на 1.
Ответ 21
В эти моменты я полагаюсь на эту простую теорему:
Заметим, что эта теорема верна для любого n вообще. Например, вы можете проверить, что
Ответ 22
Большинство предыдущих ответов проясняют вопросы об обозначениях срезов.
Ответ 23
Чтобы получить определенный фрагмент итерации (например, список), вот пример:
Ответ 24
В Python наиболее простой формой для нарезки является следующее:
При срезании с начала вы можете опустить нулевой индекс, а при срезании до конца вы можете опустить конечный индекс, поскольку он избыточен, поэтому не будьте многословны:
Отрицательные целые числа полезны при выполнении смещений относительно конца коллекции:
При нарезке можно указать индексы, выходящие за пределы, такие как:
Имейте в виду, что результатом нарезки коллекции является совершенно новая коллекция. Кроме того, при использовании обозначений срезов в назначениях длина назначений срезов не обязательно должна быть одинаковой. Значения до и после назначенного среза будут сохранены, а коллекция будет уменьшаться или увеличиваться, чтобы содержать новые значения:
Если вы пропустите начальный и конечный индексы, вы создадите копию коллекции:
Если начальный и конечный индексы опущены при выполнении операции присваивания, весь контент коллекции будет заменен копией того, на что есть ссылки:
Помимо базовой нарезки, также можно применять следующие обозначения:
Использование step предоставляет полезную хитрость для обращения коллекции в Python:
Также можно использовать отрицательные целые числа для step в качестве следующего примера:
Ответ 25
Я хочу добавить один Hello, World! Пример, объясняющий основы ломтиков для самых начинающих. Это мне очень помогло.
Пусть есть список с шестью значениями [‘P’, ‘Y’, ‘T’, ‘H’, ‘O’, ‘N’] :
Теперь, если вы сделаете фрагмент [2:5] из списка выше, это произойдет:
Ответ 26
Ниже приведен пример индекса строки:
Пример нарезки: [начало: конец: шаг]
Ниже приведен пример использования:
Ответ 27
На мой взгляд, вы лучше поймете и запомните нотацию Python для разрезания строк, если посмотрите на нее следующим образом (читайте дальше).
Давайте работать со следующей строкой.
Исходя из других языков программирования, это когда здравый смысл скомпрометирован. Что такое х и у?
Мне пришлось сесть и запустить несколько сценариев в своем поиске техники запоминания, которая поможет мне вспомнить, что такое x и y, и поможет мне правильно нарезать строки с первой попытки.
Вот пример визуализации этого.
a b [ c d e f g h ] i j
Этот трюк работает постоянно и его легко запомнить.
Ответ 28
Ответ 29
вы можете получить хорошие примеры по ссылке ниже: пример обозначения фрагмента питона
Ответ 30
Сначала мы создадим список значений, которые мы будем использовать при нарезке.
Индексируйте число 3 от A и число 6 от B.
Базовая нарезка
Как видите, определение только stop возвращает один элемент. Поскольку в начале по умолчанию ничего не задано, это приводит к извлечению только одного элемента.
С расширенным синтаксисом индексации мы получаем диапазон значений. Например, все значения извлекаются с помощью двоеточия.
Чтобы получить подмножество элементов, необходимо определить начальную и конечную позиции.
Учитывая шаблон aList [start: stop], получить первые два элемента из списка А.