Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Довжина рядка і від’ємні індекси↑ ⇐ ПредыдущаяСтр 5 из 5 Содержание книги Поиск на нашем сайте
Для зручної роботи з оператором індексування добре б було знати довжину рядка. Втім, з'ясувати це можна за допомогою вбудованої функції len(). >>> len('Hello world!') >>> Зверніть увагу, що пропуск теж враховується як символ. Визначати можна також і довжину змінної: >>> a='Hello!' >>> len(a) Тепер давайте спробуємо вивести останній символ рядка: >>> а = 'Hello!' >>> а[len(a)] Traceback (most recent call last): File "<pyshell#16>", line 1, in -toplevela[ len(a)] IndexError: string index out of range >>> Оскільки нумерація символів в рядках починається з нуля, ми використали неприпустиме значення індексу – символу з таким індексом в цьому рядку немає, тому інтерпретатор згенерував виключення IndexError: string index out of range. Виправимо помилку скориставшись композицією: як індекс можна використати будь-який вираз, що повертає ціле число. >>> а = 'Hello!' >>> а[len(a)-1] '!' Використання функції len() в операторі індексування виглядає громіздко, тому передбачено коротший варіант запису: >>> а[-1] '!' Ще один маленький експеримент. Спробуємо підставити як індекс інше від’ємне число: >>> а[-5] 'e' Таким чином, ми можемо індексувати рядок з обох її кінців – це дуже зручно. До речі, така можливість є в дуже небагатьох мовах програмування. А зараз невелика вправа для закріплення матеріалу. · Вправа. Напишіть програму, яка виводить довжину введеного користувачем рядка, а також перший, п'ятий і останній символ. Не забудьте передбачити випадок, коли довжина рядка складає менше за п'ять символів. Доступ до підрядків У випадку коли потрібно отримати доступ до більш ніж одного символу, ми повинні в квадратних дужках вказати індекс першого символу і останнього розділивши їх двокрапкою. Цей процес називається slicing (зріз). (Рис 1.)
Рис.1. Формування зрізів при доступі до підрядків. >>> msg='Monty Python' >>> msg[6:10] 'Pyth' >>> msg[-12:-7] 'Monty' Звертаємо увагу, що ми отримали три символи але не отримали четвертий. Якщо ввести діапазон [0:11] отримаємо весь рядок. >>> msg='Monty Python' >>> msg[6:10] 'Pyth' >>> msg[-12:-7] 'Monty' >>> len(msg) >>> msg[0:12] 'Monty Python' Також можна використовувати від’ємні індекси, та опускати перший чи останній індекс. >>> msg[0:5] 'Monty' >>> msg[:5] 'Monty' >>> msg[:-1] 'Monty Pytho' >>> msg[:] 'Monty Python' При доступі до підрядків можна задавати крок в зрізі. В наступному прикладі ми доступаємось до кожного другого символу з вказаного діапазону та отримуємо обернену послідовність. >>> msg[0:12:2] 'MnyPto' >>> msg[12:0:-2] 'nhy to' Зміни у рядках Рядок – це послідовність символів з довільним доступом. Рядок в мові Python неможливо змінити – в цьому випадку говорять, що це immutable тип. Спроба змінити символ в певній позиції або підрядку викличе помилку: >>> msg='Monty Python' >>> msg[2] 'n' >>> msg[2]='k'
Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> msg[2]='k' TypeError: 'str' object does not support item assignment Але, змінити символ можна за допомогою зрізів в такий спосіб: >>> msg=msg[:2] >>> msg='Monty Python' >>> msg[:2] 'Mo' >>> msg[3:] 'ty Python' >>> msg=msg[:2]+'k'+msg[3:] >>> msg 'Mokty Python' Речення Речення також можна представити як рядок і працювати з ним, як було показано вище. >>> sent='colorless green ideas sleep furiously' >>> sent[16:21] 'ideas' >>> len(sent) Але нам потрібно працювати з реченням, яке є послідовністю слів, а не символів. Тому, варто познайомитися з наступним типом послідовностей – списками.
Списки Список – це впорядкована множина значень, що ідентифікуються індексом. Багато в чому списки є схожими на рядки, які, по суті, теж є впорядкованими множинами символів. Відмінність списків і рядків полягає в тому, що елементи списку можуть бути любого типу. Впорядковані множини називають послідовностями. Створення списків Існує декілька способів створення списків. Найпростіший з них: перерахувати елементи списку через кому в квадратних дужках: >>> [10, 20, 30, 40] [10, 20, 30, 40] >>> ["one", "two", "three"] ['one', 'two', 'three'] Перший приклад – список чотирьох цілих чисел, а другий – список трьох рядків. Елементи списків зовсім не обов'язково повинні бути одного типу. Наступний список містить рядок, ціле і дробове число та інший список: >>> ["hello", 5, 2.0 [10, 20]] ['hello', 5, 2.0 [10, 20]] Список, що є елементом іншого списку, називають вкладеним. Список, який не містить жодного елементу, називають порожнім. Він позначається порожніми квадратними дужками ([]). Ну, і нарешті, як і будь-які інші значення, списки можуть зберігатися в змінних: numbers = [17, 123, 537] empty = [] print numbers, empty [17, 123, 537] [] Функція range Для завдання послідовності чисел у формі арифметичної прогресії (1 2 3 4 5 6...) зручно користуватися вбудованою функцією range(). Вона має три форми, розглянемо на прикладах всі: >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Ця форма повертає всі цілі числа в діапазоні від 0 до числа 10, не включаючи само число 10. >>> range(5, 10) [5, 6, 7, 8, 9] Ця форма повертає всі цілі числа в діапазоні від 5 до числа 10, не включаючи само число 10, але включаючи початкове число 5. >>> range(0, 10, 3) [0, 3, 6, 9] >>> range(-10, -100, -30) [-10, -40, -70] Ця форма повертає всі цілі значення в діапазоні від початкового до кінцевого з кроком, заданим третім параметром. Причому, якщо, наприклад, ви спробуєте ввести range(1, 100 -1), то очевидно, що чисел в цьому діапазоні немає, тобто результатом буде порожня множина([]). Якщо ви хочете задати діапазон через кількість елементів в списку, то слід скористатися функцією range у поєднанні з функцією len: >>> а = [`Linux', 'is', 'the', 'best', 'system'] >>> for i in range(len(a)): ... print i, а[i] #Звертання до елементу списку по його індексу ... 0 Linux 1 is 2 the 3 best 4 system Крім того, Python надає можливість швидкого створення списків цілих значень, без необхідності їх перераховувати: >>> range(1,5) [1, 2, 3, 4] У даному прикладі функція range() приймає два цілих аргументи і повертає список, який містить всі цілі числа в проміжку між заданими значеннями, включаючи перше і виключаючи друге. Існує ще два способи виклику функції range(). Якщо їй передано тільки одне значення, то в результаті вона поверне список з цілими значеннями від 0 до N, де N – значення параметра: >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Якщо ж range() викликана з трьома аргументами, то останній з них інтерпретується як розмір кроку. Тобто в результуючому списку значення йтимуть не підряд, а через проміжки, що дорівнюють заданому кроку: >>> range(1, 10, 2) [1, 3, 5, 7, 9] Списки і індекси Синтаксис звернення до елементів списку такий самий, як і при зверненні до символів стрічок – використовуємо оператор індексування ([]). >>> numbers[0] >>> numbers[-1] Стосовно списків оператор індексування працює точно так, як і у випадку стрічок. Індексом може бути будь-який вираз, що повертає ціле число, в тому числі від’ємне. Якщо індекс менше нуля, то відлік індексу буде розпочато з кінця списку. Оператор побудови зрізу списку працює подібно, як і зі стрічками: >>> list = ['a', 'b', 'c', 'd', 'e', 'f'] >>> list[1:3] ['b', 'c'] >>> list[:4] ['a', 'b', 'c', 'd'] >>> list[3:] ['d', 'e', 'f'] >>> list[:] ['a', 'b', 'c', 'd', 'e', 'f'] Єдина відмінність полягає в тому, що елементи списків (на відміну від символів стрічок) можна змінювати: >>> numbers[1]= 5 >>> numbers [17, 5, 537] >>> numbers[1:]= [6, 7] >>> numbers [17, 6, 7] >>> numbers[0], numbers[2]= 1, 2 >>> numbers [1, 6, 2] Довжина списку Неважко здогадатися, що для обчислення довжини списку можна використати функцію len(). Зверніть увагу, що якщо список містить як елемент інший список, то цей вкладений список вважатиметься як один елемент. Це видно з наступного прикладу: >>> mylist = [[1, 'one'], [2, 'two'], [3, 'three'], 'four', 5] >>> len(mylist) Додатково про списки Списковий тип даних має декілька методів. Всі вони приведені нижче:
Ось приклади, що використовують методи списків: >>> phrase=['red', 'green', 'blue', 'yellow'] >>> phrase.insert(1,'black') >>> phrase ['red', 'black', 'green', 'blue', 'yellow'] >>> phrase.append('black') >>> phrase ['red', 'black', 'green', 'blue', 'yellow', 'black'] >>> phrase.count('black') >>> phrase.index('black') >>> phrase.remove('black') >>> phrase ['red', 'green', 'blue', 'yellow', 'black'] >>> phrase.sort() >>> phrase ['black', 'blue', 'green', 'red', 'yellow'] >>> phrase.reverse() >>> phrase ['yellow', 'red', 'green', 'blue', 'black'] >>> >>> phrase1=[10,20,30,40] >>> phrase.extend(phrase1) >>> phrase ['yellow', 'red', 'green', 'blue', 'black', 10, 20, 30, 40] >>> phrase.pop(0) 'yellow' >>> phrase ['red', 'green', 'blue', 'black', 10, 20, 30, 40] Оператор del Існує спосіб видалення елементу із списку шляхом завдання індексу елементу, а не його значення: оператор del. Він також дозволяє видаляти цілі шматки із списку (що ми і раніше робили, привласнюючи шматку порожній список). Наприклад: >>> phrase=['yellow', 'red', 'green', 'blue', 'black'] >>> phrase ['yellow', 'red', 'green', 'blue', 'black'] >>> del phrase[2] >>> phrase ['yellow', 'red', 'blue', 'black'] >>> del phrase[:2] >>> phrase ['blue', 'black'] delможна ще використовувати для видалення цілої змінної: >>> del phrase >>> phrase
Traceback (most recent call last): File "<pyshell#80>", line 1, in <module> phrase NameError: name 'phrase' is not defined Тепер посилання на ім'я а приведе до помилки (принаймні, поки йому не привласнимо нового значення).
Кортежі Як можна було побачити раніше, списки і стрічки мають багато загальних властивостей, таких як індексація і зрізи. Вони є прикладами типів даних "послідовність". Існує ще один стандартний тип даних послідовності: кортеж. Кортеж складається з множини значень, що розділені комами, наприклад: >>> t = 12345, 54321, 'Привіт!' >>> t[0] >>> t (12345, 54321, 'hello!') >>> # Кортежі так само можуть бути вкладеними: ... u = (t, (1, 2, 3, 4, 5)) >>> u ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) Вміст кортежів завжди поміщається в круглі дужки, для того, щоб вкладені кортежі інтерпретувалися правильно; вони можуть бути введені як з, так і без навколишніх круглих дужок, хоча часто круглі дужки необхідні так чи інакше (особливо, якщо кортеж - частина більшого виразу). Кортежі використовуються дуже часто. Наприклад: (x, у) - координати в парі, запис в базі даних тощо. Кортежі, подібно до рядків, є незмінними: неможливо змінити окремі елементи кортежу. Можна створювати кортежі, які містять змінні об'єкти, на подобі списків. Порожні кортежі створюються парою круглих дужок без всяких елементів; кортеж з одним елементом створюється одним значенням з комою після нього (недостатньо включити одне значення в круглі дужки). Наприклад: >>> kortez_0=() >>> type(kortez_0) <type 'tuple'> >>> len(kortez_0) >>> kortez_1='hello', >>> type(kortez_1) <type 'tuple'> >>> len(kortez_1) >>> kortez_2='by',0 >>> type(kortez_2) <type 'tuple'> >>> len(kortez_2) Інструкція kortez_2='by',0 є типовим прикладом упаковки кортежу: значення 'by' і 0 упаковані в одному кортежі. Також можлива операція розпаковування кортежу: >>> x,y=kortez_2 >>> x 'by' >>> y Цієї операції достатньо, щоб розпакувати послідовність. Послідовність, що підлягає розпаковуванню вимагає списку змінних зліва, щоб кількість елементів зліва збігалася з довжиною послідовності. Зверніть увагу, що множинне призначення - дійсно тільки для комбінації упаковки кортежу і його розпаковування! Тут також слід зазначити маленьку асиметрію упаковки і розпаковування кортежів: упаковка кількох значень завжди створює кортеж, в результаті роботи розпаковування може бути будь-яка послідовність.
Набори Python використовує такий тип даних як набори. Набір - це неврегульована колекція значень без дублікатів елементів. Основне використання полягає у тестуванні вмісту і усунення подвійних значень. Набори також підтримують математичні операції такі як, об'єднання, перетинання, порівняння, і симетричне порівняння. >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] >>> fruit = set(basket) # створення набору без дублікатів >>> fruit set(['orange', 'pear', 'apple', 'banana']) >>> 'orange' in fruit # швидке тестування вмісту True >>> 'crabgrass' in fruit False >>> # Демонструє операції над набором і наявність символів у вмісті набору ... >>> а = set('abracadabra') >>> b = set('alacazam') >>> а # які унікальні символи є в а set(['a', 'r', 'b', 'c', 'd']) >>> а – b # символи в а, але що не входять в b set(['r', 'd', 'b']) >>> а | b # символи, що містяться в а або b set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l']) >>> а & b # символи містяться і в а, і в b set(['a', 'c']) >>> а ^ b # символи містяться в а або в b, але не в обох словах set(['r', 'd', 'b', 'm', 'z', 'l'])
Додаток А Методи роботи з рядками
Методи роботи зі списками
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 435; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.51.75 (0.007 с.) |