Анимация
JavaScript
|
Главная Библионтека Индексы могут иметь отрицательные значения, для отсчета с конца: >>> word[-1] # Последний символ A >>> word[-2] # Предпоследний символ p >>> word[-2:] # Последние два символа pA >>> word[:-2] # Кроме последних двух символов Hel Однако -0 обозначает то же самое, что и 0, то есть не будет отсчитываться с конца. >>> word[-0] # (так как -0 равен 0) Отрицательные индексы в срезах выходящие за пределы обрабатываются, как если бы они были равны нулю, но не пытайтесь использовать это для простых индексов (с одним элементом): >>> word[-100:] HelpA >>> word[-10] # Ошибка Traceback (innermost last): File "<stdin>", line 1 IndexError: string index out of range Полезный инвариант операции среза: s[:i] + s[i:] равно s. >>> word[:2] + word[2:] HelpA >>> word[:3] + word[3:] HelpA Срезы с вырожденными индексами обрабатываются изящно: слишком большой индекс обрабатывается, как если бы он был равен длине строки; если верхняя граница меньше нижней, то возвращается пустая строка. >>> word[1:100] elpA >>> word[10:] >>> word[2:1] Лучший способ запомнить, как определяются индексы в срезе - считать их указывающими между символами, с номером 0 на левой границе первого символа. А правая граница последнего символа имеет индекс равный длине строки, например: Первая строка чисел показывает позиции в строке, на которые указывают индексы от 0 до 5, вторая - соответствующие отрицательные индексы. Срез от i до j включает в себя все символы между краями, помеченными i и j, соответственно. Для неотрицательных индексов длина подстроки равняется разности индексов, если они оба не выходят за пределы диапазона, например, длина подстроки word [1:3] равна 2. Встроенная функция len() возвращает длину строки: >>> s = supercalifragilisticexpialidocious >>> len(s) 34 3.1.3 Строки Unicode Начиная с версии 1.6, в языке Python доступен новый тип данных для хранения текста - строка Unicode. Его можно использовать для работы с текстом, содержащим одновременно буквы и символы нескольких языков, доступных в Unicode (см. http: www.unicode.org). Строки Unicode полностью интегрируется с обычными строками, автоматически производя, где это необходимо, преобразование. Unicode имеет значительное преимущество - предоставляет возможность использовать все символы, используемые в современных и древних текстах. Ранее мы могли использовать только 256 символов из определенной кодовой страницы, что приводило к большим затруднениям, особенно при интернационализации (internationalization, обычно записывается как i18n - i + 18 символов + n) программного обеспечения. Unicode решает эту проблему, определяя одну кодовую страницу для всех символов. Создаются строки Unicode настолько же просто, как и обычные строки: >>> uHello World ! uHello World ! 2ASCII является общей частью для подавляющего большинства кодировок. Вы можете изменить кодировку по умолчанию с помощью функции sys.set string encoding(). Однако лучше все же указывать ее явно. Маленькая буква u перед кавычками указывает, что предполагается создание строки Unicode. Если Вы хотите включить в строку специальные символы, используйте управляющие последовательности: >>> uHello\u0020World ! uHello World ! Управляющая последовательность \u0 02 0 указывает, что необходимо вставить Unicode символ с порядковым номером в шестнадцатеричной системе исчисления 0x0020 (пробел). Благодаря тому, что первые 256 символов Unicode те же, что и в стандартной кодировке Latin-1, ввод текста на большинстве языков, используемых в западных странах, сильно упрощается. Как и для обычных строк, для строк Unicode существует "необрабатываемый" режим, задаваемый с помощью буквы r или R перед кавычками. Управляющими считаются только последовательности, которые применяются для обозначения символов Unicode, и только если используется нечетное количество символов обратной косой черты перед буквой u: >>> urHello\u0020World ! uHello World ! >>> urHello\\u0020World ! uHello\\\\u0020World ! Кроме описанного выше метода, Python предоставляет возможность создать строку Unicode на основе строки в известной кодировке. Встроенная функция unicode() может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими. Python по умолчанию использует кодировку ASCII2, например, при выводе на экран инструкцией print и записи в файл. Если у Вас есть данные в определенной кодировке, для получения строки Unicode используйте встроенную функцию unicode() , указав кодировку в качестве второго аргумента: >>> s = unicode("Привет", "KOI8-R") >>> s u\u041F\u044 0\u0438\u0432\u0435\u0442 Если строка Unicode содержит символы с кодом больше 127, преобразование в ASCII не возможно: >>> str(s) Traceback (most recent call last): 0 1 2 3 [ 4 ] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |