четвер, 31 березня 2022 р.

1.04.2022

Тема:  Алгоритми опрацювання табличних величин: знаходження суми значень елементів; суми або кількості значень елементів, що задовольняють заданим умовам, пошук заданого елемента

 Потреба запровадження табличних величин випливає з необхідності запам'ятовувати й однотипно (за одним алгоритмом) опрацьовувати великий набір можливо однотипних даних. Наприклад, при знаходженні середнього балу кожного учня класу з інформатики за чверть потрібно знаходити суму великої кількості оцінок. Як зберігати всі ці оцінки? Зарезервувати для цього 40 чи більше змінних? Це дуже незручно.


У мові Python відповідні зручні структури даних називають послідовностями. Це рядки (символів), списки, масиви, значення функції range і ще деякі інші об'єкти.

Списку (у мові програмування) відповідає (у математиці) послідовність, члени якої занумеровано невід'ємними цілими числами, починаючи з 0, з нефіксованими довжиною та типом елементів.

Оператори й функції для роботи зі списками (s і t у позначеннях нижче)

  • len(s) — довжина послідовності s;

  • x in s — результат перевірка приналежності значення x послідовності s — True або False. У останніх версіях Python можна перевіряти приналежність підрядка рядку;

  • x not in s — not (x in s) — результат заперечення x in s;

  • s[j] — повертає значення j-го елемента списку s або (len(s)+j)-й при j < 0;

  • s[j]= x — надання елементу з номером j списку s значення x;

  • s[i:j:d] — зріз зі списку s від елементів i-го до j-го з кроком d;

  • min(s) — найменший елемент s;

  • max(s) — найбільший елемент s;

  • s + t — результат «дописуванням» до списку s списку t;

  • s*n або n*s — результат n-кратного повторення списку s. При n ≤ 0 — порожня послідовність.

Наприклад,

[1, 2, 3] + [4, 5] == [1, 2, 3, 4, 5]
[4, 5]*3 = [4, 5, 4, 5, 4, 5]

Методи списків

  • append(x) — додає елемент зі значенням x в кінець послідовності;

  • clear — очищує список;

  • copy — створює копію списку;

  • count(x) — повертає кількість елементів зі значенням x;

  • extend(s) — розширює список, додаючи до кінця поточного списку список s;

  • index(x[,j0[,j1]]) — повертає найменший iндекс елемента зі значенням x [для номерів елементів від j0 [до j1]]. Породжує виключення ValueError, якщо елемента з таким значенням не знайдено;

  • insert(j,x) — вставляє на місце з номером j елемент зі значенням x;

  • pop(j) — повертає значення елемента з номером j, видаляючи його з послідовності;

  • remove(x) — вилучає елемент з найменшим iндексом серед тих, що мають значення x. Породжує виключення ValueError, якщо елемента з таким значенням не знайдено;

  • reverse() — зміняює порядок елементів на зворотний;

  • sort([f]) — упорядковує елементи з можливістю використання власної функції порівняння f;

Способи виведення елементів списку

  • Вказівка print(a) виводить елементи списку a у квадратних дужках через кому.

  • Цикл for можна організувати двома способами:

    • змінюючи індекс j, виводити елемент списку з індексом j.

      for i in range(len(A)):
          print(A[i], end = ' ')

      (тут і далі запис end = ' ' означає вставлення пробілу);

    • змінюючи не індекс елемента списку, а його значення.

      for elem in A:
          print(elem, end = ' ')

В останньому прикладі бачимо істотну відмінність мови Pytnon від мов-попередників: цикл for надає зручний спосіб перебрати саме елементи послідовності, а не індекси елементів.

Розглянемо приклад створення списку d цілих чисел з цифри рядка s

s = 'ab12c59p7dq'
d = []
for с in s:
    if '1234567890'.find(с) != -1:
            d.append(int(с))
print(d)

з таким результатом виведення: [1, 2, 5, 9, 7].

Способи створення й наповнення списків

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

    n = 999
    a = [0] * n
  • Перелічити елементи списку у квадратних дужках. Наприклад,

    Primes  = [2, 3, 5, 7, 11, 13]
    Rainbow = ['червоний','оранжевий','жовтий','зелений','блакитний','синій','фіолетовий']
  • Заповнити список згідно з формулою

    [вираз for змінна in послідовність]

    де послідовність містить усі значення, яких набуває змінна, від якої залежить вираз. Наприклад, список квадратів усіх цифр [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] можна створити таким чином:

    a = [j**2 for j in range(0,10)]
    print(a)
  • Cтворити порожній список і в кінець списку додавати елементи (по одному) за допомогою методу append, значення яких зчитувати, наприклад, з клавіатури.

    a = []            # створено порожній список 
    n = int(input())  # зчитино кількість елементів списку
    for i in range(n):  
        a.append(int(input()))

    Змінну n використано лише для зручності сприйняття — див. змінений приклад.

    A = []
    for i in range(int(input())):
          A.append(int(input()))

    Можна по-іншому організувати процес прочитування списків, спочатку створивши список з потрібного числа елементів.

     
    A = [0] * int(input())
    for i in range(len(A)):
        A[i] = int(input())
  • Зчитати з файлу

    f=open('input.txt','r')
    a=[]                               
    for i in range(int(f.readline())): # зчитати кількість елементів
        a.append(int(f.readline()))    # зчитати по 1 числу у рядку й заповнити масив 
    print(a)                           # вивести масив а
    b=f.readline().split()             # зчитати рядок тексту і утворити масив b з його слів
    print(b)                           # вивести масив b
  • Заповнити випадковими числами з використанням функциї randrange з модуля random:

    from random import randrange
    n = 10
    a = [randrange(1, 10) for i in range(n)]

Обчислення суми елементів масиву, що задовольняють певним умовам
(приклад подано для знаходження суми парних елементів лінійного масиву a, заповненого випадковими числами)

import random
n=9
amax=99
a=[]
for j in range(n):                      
    a.append(random.randint(1,amax))
print(a)
print('Сума парних чисел з поданих дорівнює')
s=0
for j in range(n): 
    if a[j]%2==0:
        s+=a[j]
print(s)


Немає коментарів:

Дописати коментар