Списки

Список (list) – це структура даних для зберігання об’єктів різних типів. Списки належать до змінюваних типів даних. Список може містити будь-яку кількість будь-яких об’єктів, в тому числі і вкладені списки.

Списки – це змінні об’єкти, тому їх елементи можуть змінюватися, або може змінюватися їх порядок.

Створення списків.

Існує декілька способів створення списків:

у квадратних дужках перерахувати усі елементи списку через кому;
numbers = [1, 2, 3, 4, 5]

вказати лише тільки квадратні дужки, буде створено порожній список;
L = []

за допомоги конструктора list().
L = list()

Приклад: створити програму, яка буде записувати числа із послідовності від 1 до n у список.

  • n = int(input(‘введіть кількість цифр = ‘))
  • L = list(range(1, n+1))
  • print(L) #[1, 2, 3, 4, … n]

Кожен елемент списку має свій номер (індекс), за яким до нього можна звернутися. Перший елемент має індекс [0], другий елемент має індекс [1] і так далі. Для звернення до елементів починаючи із кінця списку, можна використовувати негативні індекси, починаючи з [-1].

Приклад:

  • L = [‘red’,‘orange’,‘yellow’]
  • print(L[1]) #[‘orange’]
  • print(L[-1]) #[‘yellow’]

Вивести всі елементи списку можна за допомоги циклу.
Приклад:

  • L = [1, 2, 3, 4, 5]
  • for i in L
  • print(i, end=’ ‘) #1 2 3 4 5

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

Щоб додати елемент у список застосовуються методи append() та insert().

Метод append() – додає елемент item в кінець списку.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’]
  • L.append(input(‘введіть свій колір: ‘)) #’green’
  • print(L) #[‘red’, ‘orange’, ‘yellow’, ‘green’]

Метод insert () – додає елемент item в список за індексом [i].
Приклад:

  • L = [‘red’,‘orange’,‘green’]
  • L.insert(2,‘yellow’)
  • print(L) #[‘red’, ‘orange’, ‘yellow’, ‘green’]

Зміна елементів списку.

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

Приклад:

  • L = [‘red’,‘orange’,‘green’]
  • L[2] = ‘yellow’
  • print(L) #[‘red’, ‘orange’, ‘yellow’]

Зріз списку.

В мові Python можна отримати зріз списку.

Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • print(L[1:3]) #[‘orange’, ‘yellow’]
  • print(L[1:]) #[‘orange’, ‘yellow’, ‘green’]
  • print(L[:3]) #[‘red’, ‘orange’]
  • print(L[:]) #[‘red’, ‘orange’, ‘yellow’, ‘green’]
  • print(L[::-1]) #[‘green’,’yellow’, ‘orange’,’red’]

Видалення елементів із списку.

Щоб видалити елемент із списку можна скористатися методами pop(), remove(), clear() або оператором del.

Метод pop() – видаляє елемент з індексом [i] та повертає його. Якщо використовувати метод без аргументу, то буде видалений останній елемент зі списку.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • L.pop()
  • print(L) #[‘red’, ‘orange’, ‘yellow’]
  • print(L.pop(0)) #red
  • print(L) #[‘orange’, ‘yellow’]

Метод remove() – видаляє перше входження елемента x зі списку.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • L.remove(‘red’)
  • print(L) #[‘orange’, ‘yellow’, ‘green’]

Метод clear() – видаляє усі елементи із списку.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • L.clear()
  • print(L) #[]

Оператор del – видаляє елемент із списку або зріз.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • del L[0]
  • print(L) #[‘orange’, ‘yellow’, ‘green’]
  • del L[0:2]
  • print(L) #[‘green’]

Сортування списків.

Метод sort() – застосовується для сортування елементів списку за зростанням.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • L.sort()
  • print(L) #[‘green’, ‘orange’, ‘red’, ‘yellow’]

При сортуванні списків фактично порівнюються два об’єкти, і який з них «менше», ставиться перед тим, який «більше». Поняття «більше» і «менше» досить умовні. І якщо для чисел все просто – числа розставляються в порядку зростання, то для рядків чи інших об’єктів ситуація більш складна. Зокрема, рядки оцінюються по перших символах. Якщо перші символи рівні, оцінюються другі символи і так далі. При чому цифровий символ вважається «менше», ніж алфавітний титульний символ, а заголовний символ вважається «менше», ніж рядковий.

Приклад:

  • L = [‘red’,‘2orange’,‘Yellow’,‘green’]
  • L.sort()
  • print(L) #[‘2orange’, ‘Yellow’, ‘green’, ‘red’]

Таким чином, якщо в списку поєднуються рядки з великими та малими літерами, то можна отримати не зовсім коректні результати сортування.

І щоб змінити стандартну поведінку сортування, ми можемо передати в метод sort() в якості параметра функцію key.

Приклад:

  • L = [‘red’,‘Orange’,‘Yellow’,‘green’]
  • L.sort(key=srt.lover)
  • prin(L) #[‘green’, ‘Orange’, ‘red’, ‘Yellow’]

Метод reverse() – переставляє елементи списку у зворотному порядку.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • L.reverse()
  • print(L) #[‘green’, ‘yellow’, ‘orange’, ‘red’]

Індекс елементу.

Метод index() – використовується для отримання індексу певного елемента списку. Якщо в списку декілька однакових елементів, функція поверне індекс першого. Також, метод має два не обов’язкові параметри start та end. Води дозволять регулювати проміжок в якому буде проводитися пошук певного елемента.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’,‘green’]
  • print(L.index(‘green’)) #3

Функції агрегації.

В Python є деякі агрегатні функції:
Приклад:

  • L = [5, 4, 3, 2, 1]
  • print(len(L)) #5
  • print(min(L)) #1
  • print(max(L)) #5
  • print(sum(L)) #15

Треба зауважити, що sum працює тільки з числовими значеннями, а min, max та len можна використовувати також і з рядками.

Списки і строки.

Метод list() – перетворює строку в список, де кожним елементом цього списку виступає окремий символ цієї строки.
Приклад:

  • S = ‘My program’
  • L = list(S)
  • print(L) #[‘M’, ‘y’, ‘ ‘, ‘p’, ‘r’, ‘o’, ‘g’, ‘r’, ‘a’, ‘m’]

Метод split() – перетворює строку в список, де кожен елемент цього списку визначається роздільником, за замовчуванням – це символ пропуску. Але, роздільник може бути визначеним будь-яким рядком.
Приклад:

  • S = ‘My-program’
  • L = S.split(‘-‘)
  • print(L) #[‘My’, ‘program’]

Метод join() – об’єднує елементи списку в строку, за певним роздільником, до якого саме і застосовується метод.
Приклад:

  • L = [‘red’,‘orange’,‘yellow’]
  • S = ‘ ‘
  • S = S.join(L)
  • P = ‘–‘.join(L)
  • print(S) #red orange yellow
  • print(P) #red–orange—yellow

Генератори списків.

Для створення списків, які будуть заповнені за деяким алгоритмом, можна використовувати генератори: вирази, що дозволяють заповнити список за певною формулою.

Генератор має наступний вигляд: [вираз for змінна in послідовність]
де змінна – ідентифікатор деякої змінної, послідовність – послідовність значень, яку приймає дана змінна (це може бути список, рядок або об’єкт, отриманий за допомогою функції range), вираз – деякий вираз, як правило, залежить від використаної в генераторі змінної, яким будуть заповнені елементи списку.

Приклад: створити список, який буде заповнений квадратами чисел від 1 до n.

  • n = int(input(‘Введіть кількість членів ряду = ‘))
  • a = [i ** 2 for i in range(1, n+1)]
  • print(a) # n=5 -> [1, 4, 9, 16, 25]