Списки

Останнє оновлення 2026-01-17 | Редагувати цю сторінку

Огляд

Питання

  • Як ефективно зберігати багато значень?

Цілі

  • Пояснити, навіщо програмам потрібна можливість працювати з наборами значень.
  • Написати програми, які створюють списки, індексують їх, отримують зрізи, а також змінюють списки через присвоєння значень та виклик методів.

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


  • Виконання обчислень із сотнею змінних під назвою 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]. Чому ‘до’? Як ми бачили у епізоді 2, якщо stop перевищує загальну довжину списку values, результатом усе одно буде список, але коротший, ніж очікувалося.

Вправа

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

Нехай є:

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. Що генерує команда '-'.join(['x', 'y', 'z'])?
  1. list('some string') converts a string into a list containing all of its characters.

  2. join returns a string that is the concatenation of each string element in the list and adds the separator between each element in the list. This results in x-y-z. The separator between the elements is the string that provides this method.

Вправа

Working With the End

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

PYTHON

element = 'helium'
print(element[-1])
  1. Як Python інтерпретує від’ємний індекс?
  2. If a list or string has N elements, what is the most negative index that can safely be used with it, and what location does that index represent?
  3. If values is a list, what does del values[-1] do?
  4. How can you display all elements but the last one without changing values? (Hint: you will need to combine slicing and negative indexing.)

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

  1. Python interprets a negative index as starting from the end (as opposed to starting from the beginning). The last element is -1.

  2. The last index that can safely be used with a list of N elements is element -N, which represents the first element.

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

  4. values[:-1]

Вправа

Перехід по списку

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

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?

The program prints

PYTHON

furn
eniroulf
  1. stride є розміром кроку зрізу.

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

Вправа

Границі зрізу

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

PYTHON

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

ВИХІД

lithium

The first statement prints the whole string, since the slice goes beyond the total length of the string. The second statement returns an empty string, because the slice goes “out of bounds” of the string.

Вправа

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

Що друкують ці дві програми? Простими словами поясніть різницю між 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) returns a sorted copy of the list letters (the original list letters remains unchanged), while letters.sort() sorts the list letters in-place and does not return anything.

Вправа

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

Що друкують ці дві програми? Простими словами поясніть різницю між 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 makes new a reference to the list old; new and old point towards the same object.

new = old[:] however creates a new list object new containing all elements from the list old; new and old are different objects.

Ключові моменти
  • Список є структурою даних, яка містить багато значень.
  • Щоб отримати елемент списку, використовуйте його індекс.
  • Значення елементів списків можна замінити шляхом присвоєння.
  • Додавання елементів до списку подовжує його.
  • Щоб повністю видалити елементи зі списку, використовуйте del.
  • Порожній список не містить жодних значень.
  • Списки можуть містити значення різних типів.
  • Рядки символів можна індексувати як списки.
  • Рядки символів незмінні.
  • Indexing beyond the end of the collection is an error.