Списки

Список (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]