Списки
Останнє оновлення 2026-03-29 | Редагувати цю сторінку
Огляд
Питання
- Як ефективно зберігати багато значень?
Цілі
- Пояснити, навіщо програмам потрібна можливість працювати з наборами значень.
- Написати програми, які створюють списки, індексують їх, отримують зрізи, а також змінюють списки через присвоєння значень та виклик методів.
За допомогою списків можна зберігати кілька значень в одній структурі даних.
- Виконання обчислень із сотнею змінних під назвою
pressure_001,pressure_002тощо, було б принаймні так само повільно, як робити їх вручну. - Використовуйте список для зберігання багатьох значень разом.
- Список позначається квадратними дужками
[...]. - Значення розділяються комами
,.
- Список позначається квадратними дужками
- Використовуйте
len, щоб дізнатися, скільки значень у списку.
PYTHON
pressures = [0.273, 0.275, 0.277, 0.275, 0.276]
print('pressures:', pressures)
print('length:', len(pressures))
ВИХІД
pressures: [0.273, 0.275, 0.277, 0.275, 0.276]
length: 5
Щоб отримати елемент списку, використовуйте його індекс.
- Це робиться так само, як і при роботі з рядками.
PYTHON
print('zeroth item of pressures:', pressures[0])
print('fourth item of pressures:', pressures[4])
ВИХІД
zeroth item of pressures: 0.273
fourth item of pressures: 0.276
Значення елементів списків можна замінити шляхом присвоєння.
- Використовуйте індексний вираз ліворуч від знаку присвоєння, щоб замінити значення.
ВИХІД
Нові значення pressures: [0.265, 0.275, 0.277, 0.275, 0.276]
Додавання елементів до списку подовжує його.
- Щоб додати елементи в кінець списку, використовуйте
list_name.append.
PYTHON
primes = [2, 3, 5]
print('Початкові значення primes:', primes)
primes.append(7)
print('Список primes змінився:', primes)
ВИХІД
Початкові значення primes: [2, 3, 5]
Список primes змінився: [2, 3, 5, 7]
-
appendє методом списків.- Методи подібні функціям, але вони прив’язані до певних об’єктів.
- Для виклику методів використовується синтаксис
object_name.method_name.- Такий запис навмисно відтворює те, як ми звертаємося до функцій у бібліотеці.
- По ходу роботи ми познайомимося з іншими методами, визначеними для
списків.
- Використовуйте
help(list), якщо бажаєте переглянути їх перелік зараз.
- Використовуйте
-
extend- це метод, схожий наappend, але він дозволяє об’єднувати два списки. Наприклад:
PYTHON
teen_primes = [11, 13, 17, 19]
middle_aged_primes = [37, 41, 43, 47]
print('primes is currently:', primes)
primes.extend(teen_primes)
print('primes has now become:', primes)
primes.append(middle_aged_primes)
print('primes has finally become:', primes)
ВИХІД
primes is currently: [2, 3, 5, 7]
primes has now become: [2, 3, 5, 7, 11, 13, 17, 19]
primes has finally become: [2, 3, 5, 7, 11, 13, 17, 19, [37, 41, 43, 47]]
Зауважимо, що extend зберігає “плоску” структуру списку,
тоді як додавання списку до іншого списку за допомогою
append дає двовимірний результат: останній елемент з
primes є списком, а не цілим числом. Списки можуть містити
значення будь-якого типу; отже, можливі списки списків.
Використовуйте del для повного видалення елементів зі
списку.
- Ми використовуємо
del list_name[index]для видалення елемента зі списку (у прикладі нижче, 9 не є простим числом) і таким чином скоротити список. -
del- це не функція і не метод, а оператор мови Python.
PYTHON
primes = [2, 3, 5, 7, 9]
print('primes перед видаленням останнього елементу:', primes)
del primes[4]
print('primes після видалення останнього елементу:', primes)
ВИХІД
primes перед видаленням останнього елементу: [2, 3, 5, 7, 9]
primes після видалення останнього елементу: [2, 3, 5, 7]
Порожній список не містить жодних значень.
- Щоб створити порожній список, використовуйте
[].- Порожній список - це “нуль списків.”
- Корисний як початкова структура для накопичення значень (як ми побачимо в наступному епізоді).
Списки можуть містити значення різних типів.
- Один список може містити числа, рядки та будь-що інше.
Рядки символів можна індексувати як списки.
- Отримати окремі символи з рядка символів можна за допомогою індексів у квадратних дужках.
ВИХІД
нульовий символ: c
третій символ: b
Рядки символів незмінні.
- Неможливо змінити символи в рядку після його створення.
- Незмінний (Immutable): не може бути змінений після створення.
- На відміну від рядків, списки можна змінювати після їх створення.
- Python розглядає рядок як одне значення, яке складається з частин, а не як набір незалежних значень.
ПОМИЛКА
TypeError: 'str' object does not support item assignment
- Списки та рядки символів є колекціями.
Індексація після кінця колекції призводить до помилки.
- Python повідомляє про помилку
IndexError, якщо ми намагаємося звернутися до не наявного значення.- Це різновид помилки виконання (runtime error).
- Її неможливо виявити під час аналізу коду, оскільки індекс може бути розрахований на основі даних, з якими працює програма.
ВИХІД
IndexError: string index out of range
Який розмір має зріз?
Якщо start і stop є невід’ємними цілими
числами, якою є довжина списку values[start:stop:]?
Список values[start:stop] може містити щонайбільше
stop - start елементів. Наприклад, values[1:4]
має 3 елементи values[1], values[2], та
values[3]. Why ‘up to’? Як ми бачили у епізоді 2, якщо stop перевищує
загальну довжину списку values, результатом усе одно буде
список, але коротший, ніж очікувалося.
list('some string')перетворює рядок на список окремих символів.joinповертає рядок, який є конкатенацією всіх елементів, та додає роздільник між кожним елементом у списку. У результаті отримуємоx-y-z. Рядок, який викликає цей метод, виступає роздільником між елементами.
Working With the End
Що друкує наступна програма?
- Як Python інтерпретує від’ємний індекс?
- Якщо список або рядок має N елементів, який найбільший від’ємний індекс можна безпечно використовувати для даного рядка, і яку позицію він означає?
- Якщо
valuesє списком, що відбувається при виконанніdel values[-1]? - Як можна показати всі елементи, окрім останнього, не змінюючи
values? (Підказка: вам знадобиться одночасно використати зрізи та від’ємну індексацію.)
Програма надрукує m.
Python інтерпретує від’ємний індекс як відлік з кінця (на відміну від звичайного відліку з початку). Останній елемент має індекс
-1.Найменший від’ємний індекс, який можна безпечно використовувати зі списком із N елементів - це індекс
-N, який представляє перший елемент.del values[-1]видаляє останній елемент зі списку.values[:-1]
Програма виводить
strideis the step size of the slice.Зріз
1::2вибирає всі елементи з парними номерами з колекції: він починається з елементу1(який є другим елементом, оскільки індексація починається з0), продовжується до кінця (оскількиendне задано) і використовує розмір кроку2(таким чином обираючи кожний другий елемент).
ВИХІД
lithium
Перша команда повертає весь рядок, оскільки зріз перевищує загальну довжину рядка. Друга команда повертає порожній рядок, оскільки зріз виходить “за межі” рядка.
Програма А надрукує
ВИХІД
letters is ['g', 'o', 'l', 'd'] and result is ['d', 'g', 'l', 'o']
Програма В надрукує
ВИХІД
letters is ['d', 'g', 'l', 'o'] and result is None
sorted(letters) повертає відсортовану копію списку
letters (оригінальний список letters
залишається незмінним), тоді як letters.sort() сортує
список letters безпосередньо і нічого не повертає.
Програма А надрукує
ВИХІД
new is ['D', 'o', 'l', 'd'] and old is ['D', 'o', 'l', 'd']
Програма В надрукує
ВИХІД
new is ['D', 'o', 'l', 'd'] and old is ['g', 'o', 'l', 'd']
Оператор new = old призводить до того, що
new посилається на той самий об’єкт списку, що й
old.
Однак new = old[:] навпаки створює окремий список
new, який містить усі елементи зі списку old;
тому new та old є різними об’єктами.
- A list stores many values in a single structure.
- Щоб отримати елемент списку, використовуйте його індекс.
- Значення елементів списків можна замінити шляхом присвоєння.
- Додавання елементів до списку подовжує його.
- Щоб повністю видалити елементи зі списку, використовуйте
del. - Порожній список не містить жодних значень.
- Списки можуть містити значення різних типів.
- Рядки символів можна індексувати як списки.
- Рядки символів незмінні.
- Звернення до індексу за межами колекції призводить до помилки.