Существует шесть типов последовательностей: строки, строки 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: ранее конкатенация строк никогда не происходила на месте.
Все статьи по теме: