Списки дозволяють зберігати в одному місці взаємопов'язані дані, скільки б їх не було - кілька елементів або кілька мільйонів елементів. Робота зі списками відноситься до числа найбільш видатних можливостей Python, доступних для початківця програміста. Операції зі списками пов'язують воєдино багато важливих концепцій в програмуванні.
Що таке список?
Список - це набір елементів, які слідують в певному порядку. Ви можете створити список для зберігання букв алфавіту, цифр від 0 до 9 або імен всіх членів вашої родини. У список можна помістити будь-яку інформацію, причому дані в списку навіть не зобов'язані бути якось пов'язані один з одним. Так як список зазвичай містить більше одного елемента, рекомендується привласнювати списками імена у множині: letters, digits, names і т.д.
У мові Python список позначається квадратними дужками ( [ ] ), а окремі елементи списку розділяються комами. Простий приклад списку з назвами моделей велосипедів:
bicycles.py
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print (bicycles)
Якщо ви накажете Python вивести список, то на екрані з'являться перераховані елементи списку в квадратних дужках:
[ 'Trek', 'cannondale', 'redline', 'specialized']
Звичайно, вашим користувачам таке уявлення не підійде; розберемося, як звернутися до окремих елементів в списку.
Звернення до елементів списку.
Списки є впорядковані набори даних, тому для звернення до будь-якого елементу списку слід повідомити Python позицію (індекс) потрібного елемента. Щоб звернутися до елементу в списку, вкажіть ім'я списку, за яким слідує індекс елемента в квадратних дужках. Наприклад, назва першого велосипеда в списку bicycles виводиться наступним
чином:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
.1. print(bicycles[0])
Синтаксис звернення до елементу показаний в точці .1.. Коли ми запитуємо один елемент зі списку, Python повертає тільки цей елемент без квадратних дужок
або лапок:
trek
Саме такий результат повинні побачити користувачі - чистий, акуратно відформатований результат. Також можна використовувати строкові методи із будь-яким елементом списку. Наприклад, елемент 'trek' можна більш акуратно відформатувати за допомогою методу title():
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
Цей приклад видає такий же результат, як і попередній, тільки назва 'Trek' виводиться з великої літери.
Індекси починаються з 0, а не з 1.
Python вважає, що перший елемент списку знаходиться в позиції 0, а не в позиції 1. Цей принцип зустрічається в більшості мов програмування і пояснюється особливостями низькорівневої реалізації операцій зі списками. Якщо ви отримуєте несподівані результати, визначте, чи не припустилися ви простої помилки «Зміщення на 1». Другому елементу списку відповідає індекс 1. У цій простій схемі індекс будь-якого елемента обчислюється зменшенням на 1 його позиції в списку. Наприклад, щоб звернутися до четвертого елементу списку, слід запросити елемент з індексом 3. У наступному прикладі виводяться назви велосипедів з індексами 1 і 3:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])
При цьому виводиться другий і четвертий елементи списку:
cannondale
specialized
В Python також існує спеціальний синтаксис для звернення до останнього елементу списку. Якщо запитати елемент з індексом -1, Python завжди повертає
останній елемент в списку:
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
Фрагмент поверне значення 'specialized'. Цей синтаксис дуже корисний, тому що при роботі зі списками часто потрібно звернутися до останніх елементів, не знаючи точної кількості елементів в списку. Синтаксис також поширюється на інші негативні значення індексів. Індекс -2 повертає другий елемент від кінця списку, індекс -3 - третій елемент від кінця і т.д..
Використання окремих елементів зі списку.
Окремі значення зі списку використовуються так само, як і будь-які інші змінні. Наприклад, ви можете скористатися конкатенацією для побудови повідомлення, що містить значення зі списку. Спробуємо витягти назву першого велосипеда зі списку і скласти повідомлення, що включає це значення.
bicycles = [ 'trek', 'cannondale', 'redline', 'specialized']
.1. message = "My first bicycle was a" + bicycles[0].title() + "."
print (message)
У точці .1. програма будує повідомлення, що містить значення з bicycles[0], і зберігає його у змінній message. Так створюється просте речення зі використанням першого велосипеда зі списку:
My first bicycle was a Trek.
Зміна, додавання і видалення елементів.
Зазвичай ви будете створювати динамічні списки; це означає, що під час виконання програми в створеному вами списку будуть додаватися і видалятися елементи. Наприклад, ви можете створити гру, в якій гравець повинен стріляти по кораблях космічних загарбників. Вихідний набір кораблів зберігається в списку; кожен раз, коли ви збиваєте корабель, він видаляється зі списку. Кожен раз, коли на екрані з'являється новий ворог, він включається в список. Довжина списку кораблів буде зменшуватися і збільшуватися по ходу гри.
Зміна елементів в списку.
Синтаксис зміни елемента нагадує синтаксис звернення до елемента списку. Щоб змінити елемент, вкажіть ім'я списку і індекс змінюваного елемента в квадратних дужках; далі задайте нове значення, яке має бути присвоєно елементу. Припустимо, є список мотоциклів, і в першому елементі списку зберігається рядок 'honda'. Як змінити значення першого елемента?
.1. motorcycles = [ 'honda', 'yamaha', 'suzuki']
print(motorcycles)
.2. motorcycles[0] = 'Ducati'
print(motorcycles)
У точці .1. визначається список, в якому перший елемент містить рядок 'honda'. У точці .2. значення першого елемента замінюється рядком 'ducati'. З наведеного видно, що перший елемент дійсно змінився, а інші елементи списку зберегли колишні значення:
[ 'Honda', 'yamaha', 'suzuki']
[ 'Ducati', 'yamaha', 'suzuki']
Змінити можна значення будь-якого елемента в списку, не тільки першого.
Додавання елементів до списку.
Нові елементи можуть додаватися до списків з різних причин - наприклад, для появи на екрані нових космічних кораблів, включення нових даних в візуалізацію або додавання нових зареєстрованих користувачів на побудований вами сайт. Python надає кілька способів додавання нових даних в існуючі списки.
Приєднання елементів в кінець списку.
Найпростіший спосіб додавання нових елементів в список - приєднання елемента в кінець списку. Використовуючи список з попереднього прикладу, додамо новий
елемент 'ducati':
motorcycles = [ 'honda', 'yamaha', 'suzuki']
print(motorcycles)
.1. motorcycles.append( 'ducati')
print(motorcycles)
Метод append() в точці .1. приєднує рядок 'ducati' в кінець списку, інші елементи в списку при цьому залишаються незмінними:
[ 'honda', 'yamaha', 'suzuki']
[ 'honda', 'yamaha', 'suzuki', 'ducati']
Метод append() спрощує динамічну побудову списків. Наприклад, ви можете почати з порожнього списку і додавати в нього елементи серією команд append(). У наступному прикладі в порожній список додаються елементи 'honda', 'yamaha' і 'suzuki':
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
Отриманий список виглядає точно так само, як і списки з попередніх прикладів:
[ 'Honda', 'yamaha', 'suzuki']
Такий спосіб побудови списків зустрічається дуже часто, тому що дані, які користувач захоче зберегти в програмі, нерідко стають відомими тільки після запуску програми. Щоб користувач міг керувати вмістом списку, почніть з визначення порожнього списку, а потім приєднуйте до нього кожне нове значення.
Додавання елементів в список.
Метод insert() дозволяє додати новий елемент в довільну позицію списку. Для цього слід вказати індекс та значення нового елемента.
motorcycles = ['honda', 'yamaha', 'suzuki']
.1. motorcycles.insert(0, 'ducati')
print(motorcycles)
У цьому прикладі в точці .1. значення 'ducati' вставляється в початок списку. Метод insert() виділяє вільне місце в позиції 0 і зберігає в ньому значення 'ducati'. Всі інші значення списку при цьому зсуваються на одну позицію вправо:
['ducati', 'honda', 'yamaha', 'suzuki']
Видалення елементів зі списку.
Нерідко виникає необхідність у видаленні одного або декількох елементів із списку. Наприклад, коли гравець збиває корабель прибульця, цей корабель потрібно видалити зі списку активних ворогів. Або коли користувач вирішує видалити свій обліковий запис в створеному вами веб-додатку, цей користувач повинен бути прибраний зі списку активних користувачів. Елементи видаляються зі списку по позиції або за значенням.
Видалення елемента з використанням команди del.
Якщо вам відома позиція елемента, який повинен бути вилучений зі списку, скористайтеся командою del.
motorcycles = [ 'honda', 'yamaha', 'suzuki']
print(motorcycles)
.1. del motorcycles[0]
print(motorcycles)
У точці .1. виклик del видаляє перший елемент, 'honda', зі списку motorcycles:
[ 'honda', 'yamaha', 'suzuki']
[ 'yamaha', 'suzuki']
Команда del дозволяє видалити елемент з будь-якої позиції списку, якщо вам відомий його індекс. Наприклад, ось як зі списку видаляється другий елемент 'yamaha':
motorcycles = [ 'honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)
Другий елемент зник зі списку:
[ 'honda', 'yamaha', 'suzuki']
[ 'honda', 'suzuki']
В обох прикладах значення, видалене зі списку після використання команди del, стає недоступним.
Видалення елемента з використанням методу pop().
Іноді значення, що видаляється зі списку, має якось використовуватися. Припустимо, ви хочете отримати координати x і y щойно збитого корабля прибульців, щоб зобразити вибух в цій позиції. У веб-додатку користувач, видалений зі списку активних учасників, може бути доданий в список неактивних і т.д.
Метод pop() видаляє останній елемент зі списку, але дозволяє працювати з ним після видалення. Видалимо мотоцикл зі списку:
.1. motorcycles = [ 'honda', 'yamaha', 'suzuki']
print(motorcycles)
.2. popped_motorcycle = motorcycles.pop()
.3. print(motorcycles)
.4. print(popped_motorcycle)
Спочатку в точці .1. визначається і виводиться вміст списку motorcycles. У точці .2. значення витягується зі списку і зберігається в змінній з ім'ям popped_motorcycle. Вивід зміненого списку в точці .3. показує, що значення було видалено зі списку. Потім ми виводимо витягнуте значення в точці .4., демонструючи, що видалене зі списку значення залишається доступним в програмі.
З цього ми бачимо, що значення 'suzuki', видалене із списку, тепер зберігається в змінній popped_motorcycle:
[ 'honda', 'yamaha', 'suzuki']
[ 'honda', 'yamaha']
suzuki
Для чого може знадобитися метод pop()? Уявіть, що мотоцикли в списку зберігаються в хронологічному порядку відповідно до дати їх купівлі. В такому випадку команда pop() може використовуватися для виведення повідомлення про останній куплений мотоцикл:
motorcycles = [ 'honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print( "The last motorcycle I owned was a " + last_owned.title() + ".")
Програма виводить просте повідомлення:
The last motorcycle I owned was a Suzuki.
Витяг елементів з довільної позиції списку.
Виклик pop() може використовуватися для видалення елемента в довільній позиції списку; для цього слід вказати індекс елемента, який необхідно видалити в круглих дужках.
motorcycles = [ 'honda', 'yamaha', 'suzuki']
.1. first_owned = motorcycles.pop(0)
.2. print( 'The first motorcycle I owned was a ' + first_owned.title() + '.' )
Спочатку перший елемент витягується зі списку в точці .1., а потім в точці .2. виводиться повідомлення про цей мотоцикл. Програма виводить просте повідомлення
про перший мотоциклі:
The first motorcycle I owned was a Honda.
Пам'ятайте, що після кожного виклику pop() елемент, з яким ви працюєте, вже не знаходиться у списку. Якщо ви не впевнені в тому, який із двох способів вибрати - команду del або метод pop(), - то просте правило допоможе вам визначитися. Якщо ви збираєтеся просто видалити елемент зі списку, ніяк не використовуючи його, вибирайте команду del; якщо ж ви маєте намір використовувати елемент після видалення зі списку, вибирайте метод pop().
Видалення елементів за значенням.
Іноді позиція елемента, який необхідно видалити - невідома. Якщо ви знаєте тільки значення елемента, використовуйте метод remove().
Припустимо, зі списку потрібно видалити значення 'ducati':
motorcycles = [ 'honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
.1. motorcycles.remove( 'ducati')
print(motorcycles)
Код в точці .1. наказує Python визначити, в якій позиції списку знаходиться значення 'ducati', і видалити цей елемент:
[ 'honda', 'yamaha', 'suzuki', 'ducati']
[ 'honda', 'yamaha', 'suzuki']
Метод remove() також може використовуватися для роботи зі значенням, яке видаляється зі списку. Наступна програма видаляє значення 'ducati' і виводить причину видалення:
.1. motorcycles = [ 'honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
.2. too_expensive = 'ducati'
.3. motorcycles.remove(too_expensive)
print(motorcycles)
.4. print( "\nA " + too_expensive.title() + " is too expensive for me.")
Після визначення списку в точці .1. значення 'ducati' зберігається в змінній з ім'ям too_expensive в точці .2.. Потім ця змінна повідомляє Python, яке значення має бути видалено зі списку .3.. У точці .4. значення 'ducati' було видалено зі списку, але продовжує зберігатися у змінній too_expensive, що дозволяє вивести повідомлення з причиною видалення 'ducati' зі списку мотоциклів:
[ 'honda', 'yamaha', 'suzuki', 'ducati']
[ 'honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
ПРИМІТКА
Метод remove() видаляє тільки перше входження заданого значення. Якщо існує ймовірність того, що значення зустрічається в списку більше одного разу, використовуйте цикл для визначення того, чи були видалені всі входження даного значення. Про те, як це зробити - ми розглянемо вивчаючи цикл While.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии