В Python списки — це впорядковані колекції. Вони є важливою складовою програмного коду. Списки відносяться до вбудованих об'єктів мови. З їх допомогою можна швидко і ефективно обробляти великий обсяг інформації і структури даних будь-якої складності.
Властивості та особливості об'єкта list
Списки – це гнучкий і змінний тип даних. Вони можуть бути довільної довжини і містити необмежену кількість інформації. В якості елементів послідовності допускається використання рядків, простих і дійсних чисел, словників. Кожна змінна список в Python піддається окремої обробки, видалення або заміни. У списку є певний набір властивостей, що відрізняє їх від інших типів даних: Це групи об'єктів з впорядкованим позиціонуванням зліва направо. Списки забезпечують доступ по зсуву, тобто за номером об'єкта. В Python списки мають гетерогенністю. В послідовність можуть входити об'єкти різних типів, включаючи кількості, відображення, рядки, файли. Lists відносяться до категорії змінних об'єктів з необмеженим числом вкладеності. Списки можна помилково прийняти за пов'язані структури даних. Але насправді вони є контейнерами посилань на об'єкти, а не їх копій. Вони як адресна книга. Всі елементи list вказують на місце, де знаходиться потрібний об'єкт. У цьому списки Python аналогічні масивів мови C, але реалізовані в інтерпретаторі.
Базові операції послідовностей
Формально в мові існує три категорії. Це числа, відображення і послідовності, до яких належать тип list. Для кожної групи є загальний набір операцій. Наприклад, додавання, віднімання і множення для чисельних об'єктів або доступ по ключу до словників.
У послідовностей також є свої характерні операції: доступ до елемента з використанням цілочисельних індексів __getitem __ (); визначення довжини __len __ (); конкатенація за допомогою оператора «+»; витяг зрізу[:].
Списки в дії
Списки володіють більш широким діапазоном можливостей, ніж рядки в Python. Це потужний інструмент розробки з рядом специфічних функцій, застосовних тільки для типу list. Як виглядають методи списків на практиці: мой_список =[«один», «2», «три»]#створення нового list; мой_список; [«один», «2», «три»]; len(мой_список); 3 #інтерпретатор повертає довжину; мой_список +[1, 2, 3]#виконання конкатенації; [«один», «2», «три», 1, 2, 3]; мой_список * 2 #повторення; [«один», «2», «три», «один», «2», «три»]. При виконанні конкатенації з кожної сторони від знаку «+» мають бути однотипні послідовності, в іншому випадку інтерпретатор видасть повідомлення про помилку: [1, 2, 3]+ 314 # TypeError: can only concatenate list (not «float») to list. Для того щоб скласти в Python рядок і список, потрібно виконати попереднє перетворення типу str: второй_список = list(«рядок») # перетворення об'єкта «рядок»; второй_список; [«с», «т», «р», «о», «к», «а»]#інтерпретатор повертає list; второй_список + мой_список; [«с», «т», «р», «о», «к», «а», «один», «2», «три»]. При створенні списку в Python необхідно дотримуватися суворих правил синтаксису. Кожен об'єкт повинен бути укладений у квадратні дужки, а елементи розділені комами.
Що таке ітерація і генератори списків
Ітерація являє собою процес повторення. У контексті списків – це почергове просування по елементам итерируемого об'єкта. Наприклад: 3 in[1, 2, 3]#перевірить, чи входить зазначений елемент; True; for x in[1, 2, 3, 4]: #виконає ітерацію; print(x); 1; 2; 3; 4. Якщо ітерація – це просто обхід кожного елемента, то генерація є процесом створення нового об'єкта типу list. В Python генератори списку схожі на цикли for, але швидше працюють і синтаксично виглядають набагато простіше: Список_1 =[c * 4 for c in «SPAM»]#так виглядає генерація; Список_1; [«SSSS», «PPPP», «AAAA», «MMMM»]; Список_2 =[]; for c in «SPAM»: #аналогічна генерації команда; Список_2.append(c * 4) #list.append() додає нові елементи; Список_2; [«SSSS», «PPPP», «AAAA», «MMMM»]. В обох прикладах результат ідентичний. Але з використанням генератора код виходить набагато коротше і легше. Такий підхід повністю відповідає The Zen of Python. Це дзен, або кодекс мови, в якому один з пунктів зазначено: «Просте краще складного».
Витяг зрізу і доступ за індексом
Ці дві операції зовні схожі і дозволяють опрацьовувати окремі елементи списку в Python. Але є суттєва відмінність. В результаті індексації повертається окрема частина послідовності. А витяг зрізу створює новий об'єкт типу list:
Список1 =[«спам», «Спам», «СПАМ!»] Список1[2]#відлік зміщень починається з нуля «СПАМ»! Список1[-2]#негативне зміщення: відраховується праворуч «Спам» Список[1:]#операція вилучення зрізу повертає розділи об'єкта [«Спам», «СПАМ!»]
Як відбувається операція вилучення зрізу і її можливості
Конструкції мови дозволяють не тільки отримувати, але й змінювати окремі елементи, надаючи їм нові значення. У результаті повертається той же список, тільки з іншої змінної. Ця операція схожа на присвоювання за індексом в мові C. Інтерпретатор замінює стару посилання на зазначений у зміщенні об'єкт нової: мой_список =[«один», «восемь», «сто»]; мой_список[0:2]=[«девяносто восемь», «девяносто девять»]; мой_список; [«девяносто восемь», «девяносто девять», «сто»]. Це досить складна операція, яка відбувається в кілька етапів. Спочатку інтерпретатор видаляє всі елементи зліва від оператора. В даному прикладі це «один» і «вісім». Потім всі об'єкти праворуч від оператора вставляються в список, починаючи з лівого краю. Описаний процес забезпечує гнучку роботу зі зрізами. Кількість видаляються і додаються елементів може бути різним. Операція підходить для видалення і заміщення об'єктів, а також для розширення списків. Це досить потужний спосіб обробляти код. Але програмісти рідко використовують його на практиці, віддаючи перевагу більш прості інструкції insert, pop і remove.
Специфічні методи об'єктів типу list
Більшість методів, або функцій спрямоване на безпосереднє зміна об'єкта. Найпоширенішим є .append(). Він додавання елементів в кінець списку:
my_L =[«Я», «люблю», «программировать», «на»]; my_L; [«Я», «люблю», «программировать», «на»]; my_L.append(«Пітон») #додасть елемент, зазначений у дужках; my_L; [«Я», «люблю», «программировать», «на», «Питон»]. Інший, не менш популярний метод називається sort(). Призначений для сортування списків в Python. Метод виконує зміна елементів з використанням стандартних операторів порівняння. Також його можна використовувати для більш складних задач за допомогою іменованих аргументів: L =[«abc», «ABD», «aBe»]; L. sort(key=str.lower, reverse=True) # Змінює напрямок сортування; L; [«aBe», «ABD», «abc»]. У прикладі використовувалася синтаксична конструкція «ім'я = значення» для передачі параметрів налаштування. Аргумент key дозволяє задати власні параметри для порівняння. В даному випадку це елементи з маленької літери. А reverse означає «навпаки», тобто в порядку убування, а не зростання.
Підводні камені методів
При роботі з даними методами необхідно враховувати такі особливості: .sort ().append() змінюють список, але не повертають його. Конструкція мой_список = Список.sort() не має сенсу і результату. Саме тому в останніх версіях мови розробники ввели функцію sorted(), яка приймає list в якості аргументу:
мой_список =[1, 100, 56, 34, 2, 99]; дубль_списка = мой_список.sort(); дубль_списка #інтерпретатор нічого не повертає; мой_список; [1, 2, 34, 56, 99, 100]; дубль_списка = sorted(мой_список); дубль_списка; [1, 2, 34, 56, 99, 100]#інтерпретатор повертає отсортированную копію об'єкта.
Додаткові методи
Python пропонує додаткові методи для виконання спеціалізованої обробки списків. Наприклад, для зміни порядку слідування елементів використовується reverse. Щоб вставити кілька елементів в кінець або видалити, потрібні методи extend і pop. Також існує функція reversed, яка нагадує sorted, але використовується через виклик list: L; [4, 3, 2, 1]; list(reversed(L)) #вбудована функція сортування в зворотному порядку; [1, 2, 3, 4]. Всі розглянуті операції найчастіше застосовуються до списків і є базовими. Але є вузькоспеціалізовані методи. Наприклад, .copy(), який створює поверхневу копію об'єкта, і .count(), що повертає кількість елементів. Щоб побачити весь доступний в Python список функцій застосовних до об'єкта list, потрібно ввести help() або dir() в інтерпретаторі.