Що таке індекс у Python




Що таке індекс у Python



Індекс списку Python () – простий ілюстрований посібник

У цьому посібнику показано вам все, що вам потрібно знати, щоб допомогти вам опанувати основний індекс () методом найбільш фундаментального типу даних контейнера в мові програмування Python. https://youtu.be/a-j5ngl4mzc Визначення та використання: метод list.index (value) Повертає індекс аргументу Value у списку. Ви можете використовувати необов'язкові аргументи почати та зупинити аргументи … Python List Idex () – проста ілюстрована інструкція Детальніше »

У цьому посібнику показано вам все, що вам потрібно знати, щоб допомогти вам оволодіти необхідним Індекс () Спосіб найбільш фундаментальних контейнерів типу даних у мові програмування Python.

Визначення та використання: list.index (значення) Метод повертає індекс цінність Аргумент у Список Відмова Ви можете використовувати додаткові Почати та Стоп Аргументи для обмеження діапазону індексу, де шукати значення у списку. Якщо значення не в списку, метод кидає ValueError

>>> lst = ["Alice", 42, "Bob", 99] >>> lst.index("Alice") 0 >>> lst.index(99) 3 >>> lst.index(99, 1 , 3) Traceback (most recent call last): File "", line 1, in  lst.index(99, 1, 3) ValueError: 99 is not in list

У першому рядку прикладу ви створюєте список lst Відмова Потім ви подивіться на індекс елементів "Аліса" та 99 Відмова Якщо ви використовуєте Start = 1 і Стоп = 3 , значення 99 більше не знайдено, а Python кидає ValueError Відмова

Код головоломки - спробуйте самі:

Тепер ви знаєте основу. Давайте поглибимо ваше розуміння з коротким кодом головоломки – можеш це вирішити?

# Create a list of customers customers = ['Alice', 'Bob', 'Frank', 'Ann'] # Extract all names of customers starting with 'A' x[0] == 'A'] # Print results customers print(list(customers[i] for i in indices_of_A)) # What's the output of this puzzle?

Ви також можете вирішити цю головоломку та відстежувати свої навички Python на нашому інтерактивному додатку Finxter.

Синтаксис : Ви можете викликати цей метод на кожному об'єкті списку Python ( Python Versions 2.x і 3.x ). Ось синтаксис:

вартість Повертає індекс значення у списку. У списку відображається значення, якщо оператор == повертає true. Якщо значення не існує у списку, значення, що повертається, дорівнює -1.
Початок (Необов'язково.) Індекс того, де ви хочете розпочати пошук у списку. Усі елементи списку ігноруються перед цією позицією. Це позиційний аргумент, а чи не аргумент ключових слів.
зупинятися (Необов'язково.) Індекс того, де ви хочете припинити пошук у списку. Усі елементи списку після цієї позиції ігноруються. Це позиційний аргумент, а чи не аргумент ключових слів.

Значення, що повертається: Метод list.index (значення) Повертає ціле значення, що представляє індекс, де аргумент цінність з'являється у списку. Якщо значення не відображається у списку, метод кидає ValueError Відмова

  • Python Regex SuperPower – Ultimate Guide
  • Python перераховані наддержави (28 000 слів + відео)

Ось ваш безкоштовний PDF чит-лист, який показує всі методи списку Python на одній простій сторінці. Натисніть на зображення, щоб завантажити PDF-файл з високою роздільною здатністю, роздрукувати його та опублікувати його у свою офісну стіну:

Реалізація індексу списку Python

Так що ви дійсно хочете знати Cpython Реалізація індексу () метод?

На високому рівні алгоритм, щоб знайти індекс заданого значення у списку складається з наступних кроків:

  • Переконайтеся, що початкові та стоп-індекси не менше нуля.
  • Перейдіть до всіх елементів у списку та перевірте, чи будуть вони рівні.
  • Якщо вони рівні, негайно поверніться зі способу.
  • Якщо жодного елемента не знайдено, киньте ValueError Відмова

Ось реалізація C++ у випадку, якщо ви хочете трохи відродити навички C++. В іншому випадку просто пропустіть його і відразу рухайтеся до наступного розділу, де обговоримо обчислювальну складність алгоритму.

/*[clinic input] list.index value: object start: slice_index(accept=) = 0 stop: slice_index(accept=, c_default="PY_SSIZE_T_MAX") = sys.maxsize / Return first index of value. Raises ValueError if the value is not present. [clinic start generated code]*/ static PyObject * list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start, Py_ssize_t stop) /*[clinic end generated code: output=ec51b88787e4e481_0 ; if (start < 0) < start += Py_SIZE(self); if (start < 0) start = 0; >if (stop < 0) < stop += Py_SIZE(self); if (stop <0) stop = 0; >for (i = start; i < stop && i < Py_SIZE(self); i++) < PyObject *obj = self->ob_item[i]; Py_INCREF(obj); int cmp = PyObject_RichCompareBool(obj, value, Py_EQ); Py_DECREF(obj); if (cmp > 0) return PyLong_FromSsize_t(i); else if (cmp < 0) return NULL; >PyErr_Format(PyExc_ValueError, "%R is not in list", value); return NULL; >

Але яка обчислювальна складність цього індексу () метод в Python?

Складність вказівника списку Python

Для простоти ось пітон еквівалентний реалізації з деякими основними спрощеннями, які не змінюють загальну складність:

def index(value, lst): for i, el in enumerate(lst): if el==value: return i raise Exception('ValueError') print(index(42, [1, 2, 42, 99])) # 2 print(index("Alice", [1, 2, 3])) ''' Traceback (найбільш останній call last): File "C:\Users\xcent\Desktop\code.py", line 10, in print(index("Alice", [1, 2, 3])) File "C:\Users\xcent\Desktop\code.py", line 5, в index raise Exception('ValueError') Exception: ValueError '' '

Я знаю, що це не ідеальна реплікація вищезазначеного коду C++. Але цього достатньо, щоб побачити обчислювальне (виконання) складність list.index (значення) методу.

Індекс () Метод має лінійну складність виконання кількості елементів списку. Для N Елементи, складність часу виконання – O (n) Тому що в найгіршому випадку вам потрібно повторити кожен елемент у списку, щоб знайти, що елемент не з'являється у ньому.

Перевіримо складність виконання практично для різних розмірів списку з короткостроковою програмою.

Ви можете побачити ділянку часу складності Індекс () Метод зростаючого розміру списку тут:

На малюнку показано, як час перебування елемента останнього списку у списку. Цей експеримент повторюється для кількості елементів, що зростає. Час виконання зростає лінійним до кількості елементів.

Якщо ви зацікавлені в коді, я використовував для створення цієї ділянки MATPLOTLIB, це він:

import matplotlib.pyplot as plt import time y = [] for i in [100000 * j for j in range(10,100)]: lst = list(range(i)) t0 = time.time() x = lst.count( -99) t1 = time.time() y.append(t1-t0) plt.plot(y) plt.xlabel("List elements (10**5)") plt.ylabel("Time (sec)") plt.show()

Індекс списку Python без винятку

За промовчанням, list.index () Метод буде кидати ValueError Якщо значення не дорівнює елементу Список Відмова Коли я вперше зіткнувся з методом list.index (), я припустив, що значення, що повертається буде просто -1, тому я був здивований, що метод кинув помилку. Однак, подумавши про проблему, я дійшов висновку, що він має велике значення не повертати значення -1, якщо індекс не знайдено. Причина в тому, що за Конвенцією індекс -1 відноситься до останнього елемента в списку Python:

Але що якщо ви не хочете отримати виняток, якщо значення не може бути знайдено?

У цьому випадку ви можете використовувати функції лямбда та список списків, щоб написати свій власний метод в одному рядку коду:

>>> ind = lambda l, v: [i for i in range(len(l)) if l[i] == v] >>> ind('Alice', ['Bob', 'Alice', ' Frank']) [] >>> ind(['Bob', 'Alice', 'Frank'], 'Alice') [1]

Функція Інд Знаходить всі входження даного значення у списку в лінійному середовищі виконання, не кидаючи помилку. Натомість він просто поверне порожній список.

  • Розуміння списку (внутрішнє посилання на блог Finxter)
  • Функція лямбда (внутрішнє посилання на блог Finxter)
  • Python One-LiLER Книга (зовнішнє посилання на Amazon)

Індекс списку Python спробуйте зловити

Python list.index (значення) Метод кидає ValueError Якщо значення не в списку. Якщо ви нічого не робите про це, це може порушити всю програму. Так що ви можете зробити з цим?

Пітонічний спосіб - це "зловити" виняток у блоці спробувати/ловити. Потім можна обробляти його в блоці Catch, який виконується тільки в тому випадку, якщо значення не в списку. (Вам потрібен план резервного копіювання у будь-якому випадку.)

Ось як ви можете зловити ValueError У мінімальному фрагменті коду:

lst = [1, 2, 3] try: index = lst.index('Alice') except ValueError: index = None print(index) # None

Ви навіть не бачите, що сталося виняток під час виконання коду.

Однак, якщо це, здається, давно оприлюднений для вас (і ви любите Python One-Listers так само, як і я, ви повинні зробити таке:

По-перше, перевірте мою нову книгу Python One-listers Це навчить вас зрозуміти кожну лінійку коду, який ви коли-небудь стикаєтеся на практиці.

По-друге, використовуйте однокласницю для досягнення того ж:

lst = [1, 2, 3] index = [i for i in range(len(lst)) if lst[i]=='Alice']

Це мій кращий варіант.

Індекс списку Python поза діапазоном

Це повідомлення про помилку з'являється, якщо ви намагаєтеся отримати доступ до елементів списку з індексом, який більше, ніж максимальний допустимий індекс або менше, ніж Негативна індексація -Льон (список) Відмова

Ось мінімальний приклад обох випадків:

>>> lst = [1, 2, 3] >>> lst[3] Traceback (найменший останній час): File "", line 1, in lst[3] IndexError: list index out of range >>> lst[-5] Traceback (найменший останній останній): File "", line 1, in lst[-5] IndexError: list index out of range

Щоб уникнути IndexError, просто використовуйте індекси в межах допустимого діапазону (інклюзивних чисел) між -Льон (список) та + Льон (список) -1 Відмова

Ось як ця помилка може з'явитися при видаленні елементів зі списку під час ітерації:

l = [3, 3, 3, 4, 4, 4] for i in range(0,len(l)): l.pop(i) \Desktop\code.py", line 3, in l.pop(i) IndexError: pop index out of range

Не роби цього! Поведінка не буде, як ви очікуєте, тому що ітератор створюється лише один раз перед входом у цикл.Але видалення елемента зі списку може змінити індекси всіх елементів у списку, тому зумовлені індекси більше не вказують на правильні елементи.

Індекс списку Python декілька

Щоб знайти кілька елементів елемента у списку, можна використовувати Індекс () Метод кілька разів, встановивши індекс запуску до раніше знайденого індексу.

lst = [1, 2, 3, 3, 3, 3, 3, 3, 0, 0, 0] value = 3 min_index = 0 indices = [] while min_index < len(lst): try: indices.append(lst .index(value, min_index)) min_index = indices[-1] + 1 except ValueError: min_index = len(lst) print(indices) # [2, 3, 4, 5, 6, 7]

Але я не раджу це, як це складно і важко читати. Простий однокласник це все, що тобі потрібне:

indices = [i for i in range(len(lst)) if lst[i] == value] print(indices) # [2, 3, 4, 5, 6, 7]

Красива краще складне!

Індекс списку Python Max/Min

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101]

Максимальний елемент у списку складає 101.

Проблема : Знайти всі індексні позиції (и) максимуму у списку

Рішення: Використовуйте наступне коротке рішення, щоб отримати список максимальних позицій.

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101] maxs = [i for i in range(len(a)) if a[i] == max(a) ] print(maxs) # [5, 7, 10]

У фрагменті коду ви використовуєте Розуміння списку Щоб отримати всі показники максимального елемента Макс (а) Відмова

Звичайно, якщо ви піклуєтеся про продуктивність, ви також можете оптимізувати це шляхом розрахунку Макс (а) один раз, зберігайте його в змінній Max_a і використовуючи змінну замість розрахунку його знову і знову.

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101] max_a = max(a) maxs = [i for i in range(len(a)) if a[i] == max_a] print(maxs) # [5, 7, 10]

Ви можете легко зробити те саме для індексів мінімальних елементів у списку, використовуючи мін (а), а не MAX (A):

a = [33, 11, 23, 55, 89, 101, 1, 101, 33, 83, 101] min_a = min(a) mins = == min_a] print(mins) # [6]

Індекс списку Python з кінця (зворотний)

Ви можете розрахувати індекс з кінця, використовуючи перевернутий список (я використав нарізку lst [:: - 1] з негативним розміром кроку, щоб змінити список).

Скажіть, ви список елементів. Ви шукаєте значення 101. За замовчуванням метод list.index (value) переглядає ліворуч і повертає лівий елемент, який дорівнює значенню. Але що якщо ви хочете зробити це праворуч?

Ось як: ви розраховуєте індекс (стосовно вихідного списку), як це: index_right(a) - A [:: - 1] .index (101) - 1 Відмова

a = [23, 55, 89, 101, 1, 101, 33, 83] index_left = a.index(101) index_right = len(a) - a[::-1].index(101) - 1 print( index_left) # 3 print(index_right) # 5

Просто подумайте про це на мить. Якщо ви просто зміните список списку та знайдіть перше виникнення значення, ви отримаєте неправильний індекс щодо вихідного списку. (Ви отримаєте його назад.) Отже, спочатку необхідно змінити схему індексації, як зроблено в коді.

Індекс списку Python Regex/Wildcard

Як ви можете знайти індекс елементів у списку, який відповідає певному Regex?

Відповідь : Ви робите це з коротким Розуміння списку Заява (немає вбудованого методу, і це досить просто).

import re lst = ['Alice', 'Bob', 'Ann', 'Albrecht'] pattern = 'A.*' [i])] print(matching_indices) # [0, 2, 3]

Re.match (шаблон, lst [i]) Метод повертає відповідний об'єкт, якщо шаблон відповідає елементу у положенні I у списку. У цьому випадку ви додаєте його до списку результатів.

Індекс списку Python Cuple

Як знайти індекс кортежу у списку кортежів?

Використовуйте list.index (значення) Спосіб, який повертає індекс першого виникнення значення у списку. Це також працює для кортежів:

>>> [(1, 1), (2, 2), (3, 3)].index((3,3)) 2

Індекс списку Python True False

Як знайти всі показники Щоправда Значення у списку кортежів?

Використання списку розуміння з вбудованим перераховувати () Функція для ітерації по всьому (індекс, вартість) пари. Ось мінімальний приклад:

lst = [True, True, True, False, False, True] print([i for i, x in enumerate(lst) if x]) # [0, 1, 2, 5]

Ви можете зробити те ж саме, але перевірте на не х Щоб знайти всі показники Брехня Значення у списку:

lst = [True, True, True, False, False, True] print([i for i, x in enumerate(lst) if not x]) # [3, 4]

Індекс списку Python нуль/ненульовий

Як знайти індекси всіх нульових елементів у списку?

Використання списку розуміння з вбудованим перераховувати () Функція для ітерації по всьому (індекс, вартість) пари. Ось мінімальний приклад:

lst = [0, 0, 0, 1, 1, 1, 0, 1] print([i for i, x in enumerate(lst) if not x]) # [0, 1, 2, 6]

Ви можете знайти всі ненульові елементи, пропустивши заперечення у стані розуміння списку:

lst = [0, 0, 0, 1, 1, 1, 0, 1] print([i for i, x in enumerate(lst) if x]) # [3, 4, 5, 7]

Python List Index Pop

list.pop (індекс) Спосіб з додатковим індексом аргументу видаляє та повертає елемент в індексі позиції.

Приклад виглядає так:

>>> lst = [1, 2, 3] >>> lst.pop() 3 >>> lst [1, 2]

У першому рядку прикладу ви створюєте список lst Відмова Потім ви видалите та повертаєте остаточний елемент 3 зі списку. Результатом є список лише з двома елементами [1, 2]

Видалити індекс списку Python

Цей трюк також відносно невідомий серед початківців Python:

  • Використовувати del lst [індекс] Щоб видалити елемент під час індексу.
  • Використовувати del lst [start: Stop] Щоб видалити всі елементи в скибочку Відмова
>>> lst = list(range(10)) >>> lst [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> del lst[5] >>> lst [ 0, 1, 2, 3, 4, 6, 7, 8, 9] >>> del lst[:4] >>> lst [4, 6, 7, 8, 9]

Діапазон індексу списку Python

Якщо ви шукаєте діапазон індексу, ви, ймовірно, значення нарізка Яка передова техніка випливає ряд значень зі списку чи рядка Python. Дивитись повний підручник нарізки на блог Finxter тут.

Позначення це Список [Старт: Стоп: Крок] Відмова Аргумент кроку є необов'язковим, і вам не потрібно вирізати діапазон значень.

Ось деякі приклади:

>>> lst = ['a', 'b', 'c', 'd', 'e'] >>> lst[:] ['a', 'b', 'c', 'd', 'e'] >>> lst[2:4] ['c', 'd'] >>> lst[3:] ['d', 'e'] >>> lst[:-3] [' a', 'b'] >>> lst[:-1] ['a', 'b', 'c', 'd'] >>> lst[::2] ['a', 'c' , 'e']

Індекс списку Python у 2D списках

Скажімо, ви хочете знайти індекс ряд і стовпців значення 5 у масиві

Ви можете просто розрахувати координати X та Y, як це:

a = [[1, 2], [3, 4], [5, 6]] row = [x for x in a if 5 in x][0] x = a.index(row) y = row.index (5) print(x, y) # 2 0

Індекс списку Python () Безпечний

У вас є кілька потоків, які одночасно отримують доступ до списку? Потім ви повинні бути впевнені, що операції списку (наприклад, index () ) насправді різьблення безпечне Відмова

Іншими словами: ви можете зателефонувати в індекс () Операція у двох потоках у тому ж списку одночасно? (І ви можете бути впевнені, що результат є значущим?)

Єдине, що вам потрібно знати, полягає в тому, що кожна основна операція у реалізації CPYPHON є атомна Відмова Він виконаний повністю і відразу, перш ніж будь-який інший потік має можливість запустити на одному віртуальному двигуні. Тож немає умов раси. Приклад такого стану гонки буде наступним: Перший потік зчитує значення зі списку, другий потік перезаписує значення, і перша тема перезаписує значення знову недійсним в операції другого потоку.

Всі операції Cpython є безпечними потоковими. Але якщо ви об'єднуєте ці операції на функції вищого рівня, це не загалом без різьблення, оскільки вони складаються з багатьох операцій (можливо чергуються).

Куди піти звідси?

list.index (значення) Спосіб знаходить індекс першого виникнення елемента цінність У Список Відмова Ви дізналися IS та аути цього важливого Метод списку Python Відмова

Якщо ви продовжуєте боротися з тими основними командами Python, і ви відчуваєте навчання, що застрягли у своєму прогресі, у мене є щось для вас: Python One-listers (Amazon Link).

У книзі я дам вам ретельний огляд теми критичних комп'ютерних наук, таких як машинне навчання, регулярне вираження, наука даних, Numpy і Python Basics – все в одній лінійці коду Python!

Отримати книгу від Amazon!

Офіційна книга Опис: Python One-Listers покаже читачам, як виконати корисні завдання з одним рядком коду Python.Наслідуючи короткий перепідготовку Python, книга охоплює важливі просунуті теми, такі як нарізка, розуміння списку, мовлення, функції лямбда, алгоритми, регулярні висловлювання, нейронні мережі, логістичні регресії та ін. навички, необхідні для вирішення цієї проблеми, потім надає коротке односпрямоване рішення Python з докладним поясненням.

Працюючи як дослідник у розподілених системах, доктор Крістіан Майєр знайшов свою любов до навчання студентів комп'ютерних наук.

Щоб допомогти студентам досягти більш високих рівнів успіху Python, він заснував сайт програмування освіти Finxter.com Відмова Він автор популярної книги програмування Python One-listers (Nostarch 2020), Coauthor of Кава-брейк Python одного з найкращих 10 найбільших Пітон блоги по всьому світу.

Його пристрасті пишуть, читання та кодування. Але його найбільша пристрасть полягає в тому, щоб служити прагненню кодера через Finxter і допомагати їм підвищити свої навички. Ви можете приєднатися до його безкоштовна академія електронної пошти тут.

Читайте ще за темою:

Індексація та поділ рядків у Python 3

Тип рядка даних Python є послідовністю, складеною з одного або декількох окремих символів, у тому числі букв, чисел, пробілів або спеціальних символів. Оскільки рядок є послідовністю, до неї можна отримати доступ за допомогою індексації та поділу, як і до інших типів даних на базі послідовностей.

У цьому навчальному модулі ви дізнаєтесь, як отримувати доступ до рядків через індексацію, як розділяти їх через послідовності символів і як використовувати методи підрахунку та визначення розташування символів.

Індексація рядків

Як і тип даних списку, який містить елементи, що відповідають індексу, рядки також містять символи, яким відповідають індекси, починаючи з 0.

Для рядка Sammy Shark! індекс виглядає так:

Як бачите, перша S починається з індексу 0, а закінчується рядок символом ! з індексом 11.

Також зазначимо, що символу пробілу між Sammy та Shark також відповідає власний індекс. В даному випадку пропуску відповідає індекс 5.

Знак оклику ( ! ) також відповідає індекс. Всі інші спеціальні символи та розділові знаки, в тому числі *#$&. ;? , також символи і будуть мати свої індекси.

Оскільки кожен символ у рядку Python має свій індекс, ми можемо отримувати доступ до рядків та здійснювати з ними маніпуляції так само, як і з іншими типами послідовних даних.

Доступ до символів через позитивний числовий індекс

Використовуючи посилання на числові індекси, ми можемо ізолювати один із символів у рядку. Для цього ми помістимо індекс у квадратні дужки. Давайте декларуємо рядок, виведемо його та викличемо індекс у квадратних дужках:

ss =
"Sammy Shark!"
print(ss[4])

Коли ми посилаємось на певний числовий індекс рядка, Python повертає символ, який знаходиться на відповідній позиції. Оскільки букві y відповідає індекс 4 рядки ss = "Sammy Shark!" коли ми виводимо ss[4] , ми отримуємо y як висновок.

Числові індекси дозволяють отримувати доступ до певних символів у рядках.

Доступ до символів через негативний індекс

Якщо ми маємо довгий рядок, і ми хочемо використовувати символ ближче до кінця рядка, ми також можемо використовувати зворотний відлік від кінця рядка, починаючи з індексу -1 .

Для того ж рядка Sammy Shark! негативна розбивка індексу виглядає так:

Використовуючи негативні індекси, ми можемо вивести символ r використовуючи посилання на його положення в індексі -3, як показано в наступній послідовності:

Використання негативних індексів може бути корисним для ізоляції окремих символів ближче до кінця довгого рядка.

Поділ рядків

Також ми можемо викликати ряд символів рядка. Допустимо, ми хочемо вивести слово Shark. Для цього ми можемо створити зріз, Що являє собою послідовність символів у вихідному рядку За допомогою зрізів ми можемо викликати кілька значень символів, створюючи діапазони символів розділені двокрапкою [x:y] :

При побудові зрізу, такого як [6:11] перший індекс відповідає початку зрізу (включно), а другий - закінченню зрізу (не включно). Тому в прикладі кінець діапазону позначається індексом позиції відразу після кінця рядка.

При поділі рядків на зрізи ми створюємо підрядкитобто рядки всередині інших рядків. Викликаючи ss[6:11] , ми викликаємо підрядок Shark , що існує в рядку Sammy Shark! .

Якщо ми хочемо включити будь-який кінець рядка, ми можемо пропустити одне із чисел у синтаксисі string[n:n] . Наприклад, якщо нам потрібно вивести перше слово рядка ss - "Sammy", ми можемо зробити це так:

Ми пропустили індекс перед двокрапкою в синтаксисі зрізу і вказали тільки індекс після двокрапки, що позначає кінець підрядка.

Щоб вивести підрядок, що починається в середині рядка і йде до кінця рядка, ми можемо вказати тільки індекс перед двокрапкою:

Якщо ми вкажемо лише індекс перед двокрапкою і не вкажемо другий індекс, підрядок йтиме від відповідного першого індексу символу до кінця рядка.

Для створення зрізів можна використовувати негативні індекси. Як ми вже говорили раніше, негативні індекси рядка починаються з -1 та відраховуються далі до початку рядка. При використанні негативних індексів ми починаємо з меншого числа, тому що відповідний символ йде раніше.

Давайте використовуємо два негативні індекси для створення зрізу рядка ss:

Підстрока "ark" виводиться з рядка "Sammy Shark!", тому що символ "a" відповідає індексу -4, а символ "k" знаходиться перед позицією індексу -1.

Визначення кроку під час створення зрізів рядків

На додаток до двох індексів під час створення зрізів можна використовувати третій параметр. Третій параметр вказує крок, що означає, скільки символів потрібно зрушити після вилучення першого символу з рядка. У попередніх прикладах ми не використовували параметр кроку, а за замовчуванням Python використовує значення кроку 1, виводячи всі символи між двома індексами.

Давайте знову подивимося на приклад вище, який виводить підрядок "Shark":

Ми можемо отримати ті ж результати, додавши третій параметр кроку зі значенням 1:

Якщо крок дорівнює 1, всі символи між двома індексами зрізу виводяться. Якщо ми опустимо параметр кроку, Python за замовчуванням використовуватиме значення 1.

Якщо ми збільшимо значення кроку, деякі символи будуть пропущені:

Якщо задати крок 2 як останній параметр у синтаксисі Python ss[0:12:2] , буде пропущено кожен другий символ.Символи, що виводяться, позначені червоним кольором:

Зверніть увагу, що символ пропуску з індексом 5 також пропускається, якщо вказано крок 2.

Якщо ми використовуємо більш велике значення кроку, підрядок буде значно коротшим:

Якщо ми вкажемо крок 4 як останній параметр синтаксису Python ss[0:12:4] , буде виведено лише кожен четвертий символ. Символи, що виводяться, також позначені червоним кольором:

У цьому прикладі символ пропуску теж пропускається.

Оскільки ми виводимо весь рядок, ми можемо опустити два індекси і залишити дві двокрапки в синтаксисі, щоб отримати той самий результат:

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

Також ми можемо вказати негативне значення кроку та використовувати його для виведення вихідного рядка у зворотному порядку, якщо задамо крок -1:

Два двокрапки без параметрів означають виведення всіх символів початкового рядка, крок 1 означає виведення всіх символів без пропуску, а негативне значення кроку змінює порядок виведення символів на протилежний.

Давайте повторимо цю команду, але використовуємо крок -2:

У цьому прикладі, ss[::-2] , ми включаємо в діапазон весь початковий рядок, оскільки індекси не вказані, і задаємо порядок виведення негативним значенням кроку. Крім того, з кроком -2 ми пропускаємо кожну другу літеру рядка, що виводиться у зворотному порядку:

! k r a h S [пробіл] y m m a S

У цьому прикладі відображається символ пропуску.

Задаючи третій параметр синтаксису зрізу Python, ми вказуємо крок підрядка, який витягуємо з початкового рядка.

Методи підрахунку

Коли ми говоримо про індекси символів у рядках, варто згадати деякі методи підрахунку рядків або виведення індексів.Це може бути корисним для того, щоб обмежити кількість символів, які ми хочемо включити у форму введення, або щоб порівнювати рядки. Для розрахунку рядків, як і інших символів послідовних даних, можна використовувати кілька методів.

Спочатку ми розглянемо метод len() , який допоможе визначити довжину будь-якого типу даних упорядкованої чи невпорядкованої послідовності, включаючи рядки, списки, кортежі та словники.

Давайте виведемо довжину рядка ss:

Довжина рядка "Sammy Shark!" становить 12 символів, включаючи символ пробілу та символ знака оклику.

Замість використання змінної ми також можемо передати рядок прямо до методу len() :

print(len("Let's print the length of this string."))

Метод len() підраховує загальну кількість символів у рядку.

Якщо потрібно підрахувати, скільки разів у рядку зустрічається певний символ або послідовність символів, ми можемо використовувати метод str.count() . Давайте візьмемо наш рядок ss = "Sammy Shark!" і підрахуємо, скільки разів у ній зустрічається символ “a”:

Ми можемо пошукати й інший символ:

Хоча в рядку є буква "S", важливо розуміти, що при підрахунку враховується регістр. Якщо ми хочемо знайти всі літери в рядку незалежно від регістру, ми можемо використовувати метод str.lower() , щоб заздалегідь конвертувати всі символи рядка в нижній регістр. Ви можете дізнатися більше про цей метод у навчальному модулі Введення в методи рядків у Python 3.

Спробуємо використовувати str.count() з послідовністю символів:

likes =
"Sammy likes to swim in the ocean, likes to spin up servers, likes to smile."
print(likes.count("likes"))

У рядку likes послідовність символів, еквівалентна “likes”, зустрічається у вихідному рядку 3 рази.

Також ми можемо визначити позицію символу чи послідовності символів у рядку. Для цього ми можемо використовувати метод str.find(), який виводить позицію символу на базі індексу.

Ми можемо подивитись, де з'являється перший символ “m” у рядку ss :

Перший символ “m” з'являється у рядку “Sammy Shark!” на позиції з індексом 2. Ми можемо перевірити позиції індексу у рядку ss вище.

Давайте подивимося, де зустрічається перша послідовність символів “likes” у рядку likes :

Перший екземпляр послідовності символів “likes” починається з індексу 6, відповідного позиції символу l послідовності likes .

Що робити, якщо ми хочемо побачити, де починається друга послідовність “likes”? Для цього ми можемо передати другий параметр метод str.find() , який буде починатися з конкретного індексу. Замість того, щоб починати з початку рядка, почнемо з індексу 9:

print(likes.find("likes",
9))

У другому прикладі, що починається з індексу 9, перша послідовність символів “likes” починається з індексу 34.

Також ми можемо вказати як третій параметр кінець діапазону. Як і у випадку зі зрізами, ми можемо використовувати зворотний відлік, вказавши негативний індекс:

print(likes.find("likes",
40,
-6))

В останньому прикладі ми шукаємо позицію послідовності “likes” між індексами 40 та -6. Оскільки останній параметр є негативним, відлік виконується з кінця початкового рядка.

Методи рядка len() , str.count() та str.find() можна використовувати для визначення довжини, кількості символів чи послідовностей символів та індексів символів чи послідовностей символів у рядках.

Висновок

Можливість виклику певних індексів рядків чи конкретного зрізу рядка дає додаткову гнучкість під час роботи з цим типом даних. Оскільки рядки відносяться до послідовного типу даних, як списки та кортежі, для доступу до них можна використовувати індекси та зрізи.

Щоб продовжити вивчення рядків, ви можете прочитати додаткові матеріали щодо форматування рядків та методів рядків.

Такі для навчання з DigitalOcean Community. Використовуйте наші послуги для комп'ютера, зберігання, мережевих, і керованих програмами.

Схожі статті

  • Що таке індексація зарплати простими словами
  • Що таке Ципру
  • Що таке режим Atti для дронів Drones Cameras
  • Що таке Адамове яблуко у чоловіків
  • Що таке добори на міжкімнатні
  • Що таке дека на газонокосарці
  • Що таке код помилки 601
  • Що таке Жилка яловича
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x