Списки

Останнє оновлення 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

Значення елементів списків можна замінити шляхом присвоєння.


  • Використовуйте індексний вираз ліворуч від знаку присвоєння, щоб замінити значення.

PYTHON

pressures[0] = 0.265 
print('нові значення pressures:', pressures)

ВИХІД

Нові значення 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]

Порожній список не містить жодних значень.


  • Щоб створити порожній список, використовуйте [].
    • Порожній список - це “нуль списків.”
  • Корисний як початкова структура для накопичення значень (як ми побачимо в наступному епізоді).

Списки можуть містити значення різних типів.


  • Один список може містити числа, рядки та будь-що інше.

PYTHON

goals = [1, 'Створити списки.', 2, 'Вилучити елементи із списків.', 3, 'Змінити списки.']

Рядки символів можна індексувати як списки.


  • Отримати окремі символи з рядка символів можна за допомогою індексів у квадратних дужках.

PYTHON

element = 'carbon'
print('нульовий символ:', element[0])
print('третій символ:', element[3])

ВИХІД

нульовий символ: c
третій символ: b

Рядки символів незмінні.


  • Неможливо змінити символи в рядку після його створення.
    • Незмінний (Immutable): не може бути змінений після створення.
    • На відміну від рядків, списки можна змінювати після їх створення.
  • Python розглядає рядок як одне значення, яке складається з частин, а не як набір незалежних значень.

PYTHON

element[0] = 'C'

ПОМИЛКА

TypeError: 'str' object does not support item assignment
  • Списки та рядки символів є колекціями.

Індексація після кінця колекції призводить до помилки.


  • Python повідомляє про помилку IndexError, якщо ми намагаємося звернутися до не наявного значення.
    • Це різновид помилки виконання (runtime error).
    • Її неможливо виявити під час аналізу коду, оскільки індекс може бути розрахований на основі даних, з якими працює програма.

PYTHON

print('99th element of element is:', element[99])

ВИХІД

IndexError: string index out of range
Вправа

Заповнення пропусків

Заповніть пропуски так, щоб наведена нижче програма видала показаний результат.

PYTHON

values = ____
values.____(1)
values.____(3)
values.____(5)
print('first time:', values)
values = values[____]
print('second time:', values)

ВИХІД

first time: [1, 3, 5]
second time: [3, 5]

PYTHON

values = []
values.append(1)
values.append(3)
values.append(5)
print('first time:', values)
values = values[1:]
print('second time:', values)
Вправа

Який розмір має зріз?

Якщо 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, результатом усе одно буде список, але коротший, ніж очікувалося.

Вправа

Від рядків до списків і назад

Given this:

PYTHON

print('string to list:', list('tin'))
print('list to string:', ''.join(['g', 'o', 'l', 'd']))

ВИХІД

string to list: ['t', 'i', 'n']
list to string: gold
  1. Що робить команда list('some string')?
  2. What does '-'.join(['x', 'y', 'z']) generate?
  1. list('some string') перетворює рядок на список окремих символів.

  2. join повертає рядок, який є конкатенацією всіх елементів, та додає роздільник між кожним елементом у списку. У результаті отримуємо x-y-z. Рядок, який викликає цей метод, виступає роздільником між елементами.

Вправа

Working With the End

Що друкує наступна програма?

PYTHON

element = 'helium'
print(element[-1])
  1. Як Python інтерпретує від’ємний індекс?
  2. Якщо список або рядок має N елементів, який найбільший від’ємний індекс можна безпечно використовувати для даного рядка, і яку позицію він означає?
  3. Якщо values є списком, що відбувається при виконанні del values[-1]?
  4. Як можна показати всі елементи, окрім останнього, не змінюючи values? (Підказка: вам знадобиться одночасно використати зрізи та від’ємну індексацію.)

Програма надрукує m.

  1. Python інтерпретує від’ємний індекс як відлік з кінця (на відміну від звичайного відліку з початку). Останній елемент має індекс -1.

  2. Найменший від’ємний індекс, який можна безпечно використовувати зі списком із N елементів - це індекс -N, який представляє перший елемент.

  3. del values[-1] видаляє останній елемент зі списку.

  4. values[:-1]

Вправа

Stepping Through a List

Що друкує наступна програма?

PYTHON

element = 'fluorine'
print(element[::2])
print(element[::-1])
  1. Якщо ми визначаємо зріз як low:high:stride, що робить stride?
  2. What expression would select all of the even-numbered items from a collection?

Програма виводить

PYTHON

furn
eniroulf
  1. stride is the step size of the slice.

  2. Зріз 1::2 вибирає всі елементи з парними номерами з колекції: він починається з елементу 1 (який є другим елементом, оскільки індексація починається з 0), продовжується до кінця (оскільки end не задано) і використовує розмір кроку 2 (таким чином обираючи кожний другий елемент).

Вправа

Slice Bounds

Що друкує наступна програма?

PYTHON

element = 'lithium'
print(element[0:20])
print(element[-1:3])

ВИХІД

lithium

Перша команда повертає весь рядок, оскільки зріз перевищує загальну довжину рядка. Друга команда повертає порожній рядок, оскільки зріз виходить “за межі” рядка.

Вправа

Сортування на місці чи у новий список

Що друкують ці дві програми? In simple terms, explain the difference between sorted(letters) and letters.sort().

PYTHON

# Program A
letters = list('gold')
result = sorted(letters)
print('letters is', letters, 'and result is', result)

PYTHON

# Program B
letters = list('gold')
result = letters.sort()
print('letters is', letters, 'and result is', result)

Програма А надрукує

ВИХІД

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 безпосередньо і нічого не повертає.

Вправа

Копіювання (чи ні)

Що друкують ці дві програми? In simple terms, explain the difference between new = old and new = old[:].

PYTHON

# Program A
old = list('gold')
new = old      # simple assignment
new[0] = 'D'
print('new is', new, 'and old is', old)

PYTHON

# Program B
old = list('gold')
new = old[:]   # assigning a slice
new[0] = 'D'
print('new is', new, 'and old is', old)

Програма А надрукує

ВИХІД

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.
  • Порожній список не містить жодних значень.
  • Списки можуть містити значення різних типів.
  • Рядки символів можна індексувати як списки.
  • Рядки символів незмінні.
  • Звернення до індексу за межами колекції призводить до помилки.