Объекты типа sequence

Существует шесть типов последовательностей: строки, строки Unicode, списки, кортежи, буферы и объекты xrange

  • Строковые литералы пишутся в одинарных или двойных кавычках: «xyzzy» , «frobozz».
  • Строки в Юникоде во многом похожи на строки, но указываются с использованием символа «u»: u’abc ‘ , u’ def
  • Списки – последовательность элементов в квадратных скобках, элементы разделены запятыми: [a, b, c] .
  • Кортежи – последовательность элементов в круглых скобках или без них, но пустые кортежи должны обязательно иметь круглые скобки, например a, b, c или (). Кортеж ихз одного элемента должен иметь запятую в конце, например (d,) .
  • Буферные объекты напрямую не поддерживаются синтаксисом Python, но могут быть созданы вызовом встроенного буфера функций (). Они не поддерживают конкатенацию или повторение.
  • Объекты Xrange подобны буферам тем, что для для их создания нет специального синтаксиса , но они создаются с использованием функции xrange (). Они не поддерживают срезы, конкатенацию или повторение, а использование in , not in , min () или max () на них неэффективно.

Операции с объектами типа sequence

Для последовательностей операции «in» и «not in» имеют те же приоритеты, что и операции сравнения. Операции «+» и «*» имеют тот же приоритет, что и соответствующие числовые операции.

В этой таблице перечислены операции последовательности, отсортированные по возрастанию приоритета (операции в одном поле имеют одинаковый приоритет). В таблице s и t являются последовательностями одного и того же типа; N, i и j являются целыми числами:

Примечания

  • Когда s является строковым или строковым объектом Unicode, in и not in выступают в качестве подстрочного теста. В версиях Python до 2.3, x должен был быть строкой длиной в 1. В Python 2.3 и более поздних версиях x может быть строкой любой длины.
  • Значения n меньше 0 рассматриваются как 0 (что дает пустую последовательность того же типа, что и s). Обратите внимание, что вложенные структуры не копируются.
    >>> lists = [[]] * 3
    >>> lists
    [[], [], []]
    >>> lists[0].append(3)
    >>> lists
    [[3], [3], [3]]

    Произошло то, что [[]] представляет собой одноэлементный список, содержащий пустой список, поэтому все три элемента [[]] * 3 являются (указателями) на этот единственный пустой список. Изменение одного из элементов списка изменяет этот один список. Вы можете создать список различных списков следующим образом:

    >>> lists = [[] for i in range(3)]
    >>> lists[0].append(3)
    >>> lists[1].append(5)
    >>> lists[2].append(7)
    >>> lists
    [[3], [5], [7]]
  • Если i или j отрицательны, индекс относится к концу строки: len (s) + i или len (s) + j заменены. Но учтите, что -0 все равно 0.
  • Срез s от i до j определяется как последовательность элементов с индексом k, так что i <= k
  • Срез s от i до j с шагом k определяется как последовательность элементов с индексом x = i + n * k, где 0 <= n <= ((j-i) / k). Другими словами, индексы i, i + k, i + 2 * k, i + 3 * k и т. д. останавливаются, когда j достигнуто (но никогда не включает j). Если i или j больше len (s), используйте len (s). Если i или j опущены, они становятся конечными значениями (конец которых зависит от знака k). Заметим, что k не может быть нулем.
  • Если s и t – обе строки, некоторые реализации Python, такие как CPython, обычно могут выполнять оптимизацию на месте для назначений формы s = s + t или s + = t. Для чувствительного к производительности кода предпочтительнее использовать метод str.join (), который обеспечивает постоянную линейную производительность конкатенации в разных версиях и реализациях. Изменено в версии 2.4: ранее конкатенация строк никогда не происходила на месте.

Все статьи по теме:

Поделитесь с друзьями:

Оставьте комментарий