Что означают квадратные скобки в питоне
Перейти к содержимому

Что означают квадратные скобки в питоне

  • автор:

Типы данных Python

Числа имеют четыре типа в Python. Int, float, сложный и длинный.

 int_num = 10 #int value float_num = 10.2 #float value complex_num = 3.14j #complex value long_num = 1234567L #long value 

Тип данных String

Строка идентифицируется как непрерывный набор символов, представленных в кавычках. Python допускает пары одинарных или двойных кавычек. Строки имеют тип данных неизменяемой последовательности, т.е. каждый раз, когда кто-либо вносит какие-либо изменения в строку, создается совершенно новый строковый объект.

 a_str = 'Hello World' print(a_str) #output will be whole string. Hello World print(a_str[0]) #output will be first character. H print(a_str[0:5]) #output will be first five characters. Hello 

Тип данных списка

Список содержит элементы, разделенные запятыми и заключенные в квадратные скобки []. Списки почти аналогичны массивам в C. Одно отличие состоит в том, что все элементы, принадлежащие списку, могут иметь различный тип данных.

 list = [123,'abcd',10.2,'d'] #can be a array of any data type or single data type. list1 = ['hello','world'] print(list) #will ouput whole list. [123,'abcd',10.2,'d'] print(list[0:2]) #will output first two element of list. [123,'abcd'] print(list1 * 2) #will gave list1 two times. ['hello','world','hello','world'] print(list + list1) #will gave concatenation of both the lists. [123,'abcd',10.2,'d','hello','world'] 

Тип данных кортежа

Списки заключены в квадратные скобки [], и их элементы и размер могут быть изменены, а кортежи заключены в скобки () и не могут быть обновлены. Кортежи неизменны.

 tuple = (123,'hello') tuple1 =('world') print(tuple) #will output whole tuple. (123,'hello') print(tuple[0]) #will output first value. (123) print(tuple + tuple1) #will output (123,'hello','world') tuple[1]='update' #this will give you error. 

Тип данных словаря

Словарь состоит из пар ключ-значение. Он заключен в фигурные скобки <>, а значения можно назначать и получать к ним доступ в квадратных скобках [].

 dic= print(dic) #will output all the key-value pairs. print(dic['name']) #will output only value with 'name' key. 'red' print(dic.values()) #will output list of values in dic. ['red',10] print(dic.keys()) #will output list of keys. ['name','age'] 

Установить типы данных

Наборы представляют собой неупорядоченные наборы уникальных объектов, существует два типа наборов:

Наборы — они изменчивы и новые элементы могут быть добавлены после определения наборов

 basket = print(basket) # duplicates will be removed > a = set('abracadabra') print(a) # unique letters in a > a.add('z') print(a) >

Замороженные наборы — они неизменны, и новые элементы не могут быть добавлены после его определения.

 b = frozenset('asdfagsa') print(b) > frozenset() cities = frozenset(["Frankfurt", "Basel","Freiburg"]) print(cities) > frozenset() 

В каких случаях пишутся квадратные скобки в Python? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 5 лет назад .
В каких случаях пишутся квадратные скобки в Python?
Отслеживать
13.8k 12 12 золотых знаков 43 43 серебряных знака 76 76 бронзовых знаков
задан 16 янв 2019 в 18:06
Quiet Games Quiet Games
1 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
В тех, где это допустимо по синтаксису и уместно в контексте решаемой задачи.
16 янв 2019 в 18:18

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Тогда, когда создается/используется список как тип данных, подробнее можешь почитать, загуглив «списки Python» или по ссылке.

Отслеживать
user262779
ответ дан 16 янв 2019 в 19:40
Артем Учуаткин Артем Учуаткин
11 1 1 бронзовый знак

В очереди проверок вам могут указать, что это ответ-ссылка. Я ответил «выглядит нормально», т.к. начало ответа пусть и кратко, но говорит про использование скобок в списках — из очереди проверок.

Подробное руководство по индексам и срезам в Python

Материал дает понимание того, как связан индекс элемента и срез последовательности, объясняется работа с объектом среза и его применение на практике.

Содержание:

  • Введение в индексы и срезы;
  • Объект среза slice() ;
  • Значения по умолчанию;
  • Особый случай среза: копия последовательности;
  • Примеры часто используемые срезов;
  • Метод среза .indexes ;
  • Собственные классы с возможностью применения срезов;
  • Получение среза последовательности sequence[i:j] ;
  • Получение среза с заданным шагом sequence[i:j:k] ;
  • Замена части списка операцией среза;
  • Замена части списка срезом c заданным шагом;
  • Удаление части списка операцией среза;
  • Удаление части списка срезом с заданным шагом

Введение в индексы и срезы.

В Python некоторые объекты, такие как строки или списки, можно нарезать. Например, можно получить первый элемент списка или строку с помощью индекса элемента:

>>> my_list = [1,2,3] >>> my_list[0] # 1 >>> my_string = "Python" >>> my_string[0] # P 

Python использует квадратные скобки [ и ] для доступа к отдельным элементам объектов, которые можно разбить на части. Внутри этих квадратных скобок можно указать нечто большее, чем просто доступ к отдельным элементам.

Python поддерживает указание отрицательных индексов, их можно использовать следующим образом:

>>> my_list = list("Python") >>> my_list[-1] 

Выражение my_list[-1] представляет последний элемент списка, my_list[-2] представляет предпоследний элемент и так далее.

Что делать, если нужно извлечь более одного элемента последовательности? Например, необходимо извлечь все от начала до конца, за исключением самого последнего элемента:

>>> my_list = list("Python") >>> my_list[0:-1] 

Или, если нужен каждый четный элемент списка, то есть элемент 0, 2 и т. д.? Для этого нужно перейти от первого элемента к последнему, но пропустить каждый второй элемент. Например:

>>> my_list = list("Python") >>> my_list[0:len(my_list):2] # ['P', 't', 'o'] 

Объект среза slice() .

За кулисами, индекс, который используется для доступа к отдельным элементам последовательности представляет собой объект среза slice() принимающий три аргумента: slice(start, stop, step) .

Проверим это утверждение:

>>> my_list = list("Python") >>> start = 0 >>> stop = len(my_list) >>> step = 2 # объект среза >>> slice_obj = slice(start, stop, step) # сравниваем >>> my_list[start:stop:step] == my_list[slice_obj] # True 

Примечание: буква P является первым элементом в списке ( list(«Python») ), поэтому она индексируется как 0. Список имеет длину 6, и, следовательно, первый элемент также может быть проиндексирован как -6.

Если использовать начало start и конец stop объекта среза, то каждый элемент между этими числами покрывается срезом. Некоторые примеры:

>>> my_string = "Python" >>> my_string[0:1] # P >>> my_string[0:5] # Pytho 

Это способ запомнить, что начальное значение является инклюзивным, а конечное — исключающим.

Значения по умолчанию.

В большинстве случаев приходится делить список:

  • начиная с 0 (первый элемент последовательности);
  • с захватом нужного последнего элемента;
  • с определенным шагом.

Следовательно, значения по умолчанию можно опустить и использовать синтаксис : :

>>> my_list = list("Python") >>> my_list[0:4] == my_list[:4] # True # используем шаг 2 >>> my_list[0:len(my_list):2] == my_list[::2] # True 

Технически, всякий раз, когда опускается число между двоеточиями, пропущенные числа будут иметь значение None .

И, в свою очередь, объект slice() заменит None на:

  • 0 для начального значения;
  • len(list) для конечного значения;
  • 1 для значения шага.

Но, если значение шага отрицательное, то числа заменяются на:

  • -1 для начального значения;
  • -len(list) — 1 для конечного значения.

Например, ‘Python'[::-1] технически совпадает с ‘Python'[-1:-7:-1]

Особый случай среза: копия последовательности.

Существует специальный случай для среза, который можно использовать в качестве поверхностного копирования. Если использовать только значения по умолчанию, т. е. my_list[:] , то это выражение создаст точно такие же элементы:

>>> my_list = list("Python") >>> my_list_2 = my_list[:] >>> my_list==my_list_2 # True 

Элементы в списке действительно совпадают. Однако новый объект списка не является ссылкой на оригинал. Можно проверить это утверждение, используя встроенный идентификатор:

>>> id(my_list) # 139967020891648 >>> id(my_list_2) # 139967018223424 

Обратите внимание, что каждая операция среза возвращает новый объект. Копия последовательности создается при использовании только [:] .

Пример, иллюстрирующий разницу:

>>> a = list("Python") # ссылка на оригинал списка >>> b = a >>> a[-1] = "N" >>> a # ['P', 'y', 't', 'h', 'o', 'N'] >>> b # ['P', 'y', 't', 'h', 'o', 'N'] >>> a = list("Python") # копия оригинала списка >>> b = a[:] >>> a[-1] = "N" >>> a # ['P', 'y', 't', 'h', 'o', 'N'] >>> b # ['P', 'y', 't', 'h', 'o', 'n'] 

Примеры часто используемые срезов:

  • [:] — копия последовательности;
  • [::2] — четные элементы последовательности начиная с первого;
  • [1::2] — нечетные элементы последовательности начиная со второго;
  • [1:] — все элементы, кроме первого;
  • [:-1] — все элементы, кроме последнего;
  • [1:-1] — все элементы, кроме первого и последнего;
  • [::-1] — все элементы в обратном порядке (реверс последовательности);
  • [-2:0:-1] — все элементы, кроме первого и последнего, в обратном порядке;
  • [-2:0:-2] — каждый второй элемент, кроме первого и последнего, в обратном порядке;

Метод среза .indices .

Каждый объект slice() в Python имеет метод slice.indices() . Этот метод возвращает кортеж (start, end, step) , с помощью которой можно перестроить цикл, эквивалентный операции среза. Звучит сложно? Начнем разбираться с последовательности:

>>> sequence = list("Python") 

Затем создадим объект slice() . Например возьмем каждый второй элемент, т.е. sequence[::2] .

# эквивалентно `[::2]` >>> my_slice = slice(None, None, 2) 

Так как в качестве некоторых аргументов используется None , то объект slice() должен вычислять фактические значения индекса на основе длины последовательности. Следовательно, чтобы получить кортеж индексов, необходимо передать длину последовательности методу slice.indices() , например:

>>> indices = my_slice.indices(len(sequence)) >>> indices # (0, 6, 2) 

Теперь можно воссоздать цикл следующим образом:

sequence = list("Python") start, stop, step = (0, 6, 2) i = start while i != stop: print(sequence[i]) i = i+step 

Этот цикл позволяет получить доступ к тем же элементам последовательности, что и сам срез.

Собственные классы с возможностью применения срезов.

Python не был бы Python, если бы невозможно было использовать объект среза в своих собственных классах. Более того, срезы не обязательно должны быть числовыми значениями. Например, можно создать адресную книгу, которую потом можно нарезать по алфавитным индексам.

import string class AddressBook: def __init__(self): self.addresses = [] def add_address(self, name, address): self.addresses.append((name, address)) def get_addresses_by_first_letters(self, letters): letters = letters.upper() return [(name, address) for name, address in self.addresses if any(name.upper().startswith(letter) for letter in letters)] def __getitem__(self, key): if isinstance(key, str): return self.get_addresses_by_first_letters(key) if isinstance(key, slice): start, stop, step = key.start, key.stop, key.step letters = (string.ascii_uppercase[string.ascii_uppercase.index(start):string.ascii_uppercase.index(stop)+1:step]) return self.get_addresses_by_first_letters(letters) address_book = AddressBook() address_book.add_address("Sherlock Holmes", "221B Baker St., London") address_book.add_address("Wallace and Gromit", "62 West Wallaby Street, Wigan, Lancashire") address_book.add_address("Peter Wimsey", "110a Piccadilly, London") address_book.add_address("Al Bundy", "9764 Jeopardy Lane, Chicago, Illinois") address_book.add_address("John Dolittle", "Oxenthorpe Road, Puddleby-on-the-Marsh, Slopshire, England") address_book.add_address("Spongebob", "124 Conch Street, Bikini Bottom, Pacific Ocean") address_book.add_address("Hercule Poirot", "Apt. 56B, Whitehaven Mansions, Sandhurst Square, London W1") address_book.add_address("Bart Simpson", "742 Evergreen Terrace, Springfield, USA") print(string.ascii_uppercase) print(string.ascii_uppercase.index("A")) print(string.ascii_uppercase.index("Z")) print(address_book["A"]) print(address_book["B"]) print(address_book["S"]) print(address_book["A":"H"]) 

Разбираемся в созданном классе AddressBook .

  • Метод get_addresses_by_first_letters() : Этот метод фильтрует все адреса, принадлежащие имени, которые начинаются с любой буквы в аргументе letters . Во-первых, эта функция нечувствительна к регистру, так как преобразует буквы в верхний регистр. Затем используется генератор списка поверх внутреннего списка адресов. Условие внутри генератора списка проверяет, соответствует ли какая-либо из предоставленных букв первой букве, соответствующее значению имени.
  • Метод __getitem__ : Чтобы сделать объекты адресной книги доступными для использования среза, необходимо переопределить магический метод Python __getitem__ . Сначала проверяется, является ли ключ строкой. Это будет иметь место, если получаем доступ к объекту с помощью одной буквы в квадратных скобках, например так: address_book[‘A’] . Для этого тривиального случая можно просто вернуть любые адреса, имя которых начинается с данной буквы. Интересная часть, когда ключ является объектом среза. Например, этому условию будет соответствовать обращение типа address_book[‘A’:’H’] . Во-первых, идентифицируются все буквы в алфавитном порядке между буквами A и H . Модуль string перечисляет все латинские буквы в string.ascii_uppercase . Далее используется срез для извлечения букв между заданными буквами. Обратите внимание на +1 во втором параметре среза. Таким образом, гарантируется, что последняя буква является включающей, а не исключающей. После того, как определили все буквы в последовательности, используется метод get_addresses_by_first_letters() , о котором говорилось выше.

Что означают квадратные скобки в документации?

Часто в документации встречаются квадратные скобки, например _.get(object, path, [defaultValue]) — что они означают?

  • Количеству голосов ▼
  • Дата создания

06 апреля 2022

Таким образом в документации отмечают необязательные параметры, то есть на примере _.get(object, path, [defaultValue]) — этот метод можно вызвать как с двумя параметрами object и path , так и с тремя(добавляется defaultValue ). Третий параметр не обязательный, он указывает какое значение вернуть, если в объекте не будет значение в указанном пути:

const object =  'a': [ 'b':  'c': 3 > >] >; // Вызов с двумя параметрами: _.get(object, 'a[0].b.c'); // => 3 // Ещё один вызов с двумя параметрами: _.get(object, ['a', '0', 'b', 'c']); // => 3 // Вызов с тремя параметрами: _.get(object, 'a.b.c', 'default'); // => 'default' 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *