Розуміння функції суми Python [With Examples]

Дізнайтеся все про функцію sum() у Python: від синтаксису до її використання з різними ітераціями — з корисними прикладами коду.

Під час роботи з ітераціями Python, такими як список чисел, звичайною операцією є пошук суми всіх елементів у списку. Ми також зіткнемося з такими операціями під час роботи з іншими ітераторами, такими як кортежі та набори.

Це можна зробити кількома різними способами, але рекомендований спосіб Pythonic — використання вбудованої функції sum().

Тут ми почнемо з розгляду інших підходів, таких як цикл і визначення функції. Потім ми перейдемо до вивчення синтаксису функції Python sum() і прикладів коду, щоб краще зрозуміти її.

Підсумовування значень у Python Iterable

📋 Ви можете кодувати разом у Python REPL. Або ви можете скористатися онлайн-редактором Python від techukraine.net.

Розглянемо наступний список чисел:

>>> nums = [2,8,5,3,11,7,9]

Наша мета – знайти суму всіх чисел у списку. Незабаром ми перейдемо до функції Python sum(), але почнемо з деяких інших підходів, які ми можемо використовувати. До них належать:

  • Використання простого циклу for
  • Використання функції reduce() із модуля functools
  • Визначення спеціальної функції

Використання циклів

Щоб знайти суму всіх елементів у списку, ми можемо використати такий цикл for:

  • Ініціалізувати загальну змінну нулем.
  • Перегляньте список номерів і отримайте доступ до кожного номера.
  • Додайте число до загального.
>>> nums = [2,8,5,3,11,7,9]
>>> total = 0
>>> for num in nums:
...     total += num
...
>>> total
45

Використання функції зменшення

Іншим підходом до підсумовування ітерацій є використання функції reduce(). Функція зменшення, вбудована в модуль functools Python, приймає функцію та ітерацію. І зменшує iterable шляхом послідовного застосування функції до елементів iterable.

  Як встановити та використовувати сторонні клавіатури на iPhone та iPad

Тут ми використовуємо лямбда-функцію, щоб визначити додавання двох чисел і передати список nums як ітерований.

>>> nums = [2,8,5,3,11,7,9]
>>> from functools import reduce
>>> total = reduce(lambda n1, n2: n1 + n2, nums)
>>> total
45

Функція reduce() працює шляхом послідовного додавання двох чисел — зліва направо — доки не зведеться до єдиного значення суми:

Використання спеціальної функції

Ми також можемо визначити спеціальну функцію для цього. Тут ми визначаємо функцію sum_list, яка:

  • Приймає список чисел як аргумент і
  • Повертає суму елементів у списку.

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

>>> def sum_list(some_list):
...     total = 0
...     for num in some_list:
...        total += num
...     return total
...

Виклик функції sum_list() із параметрами nums повертає суму 45:

>>> nums = [2,8,5,3,11,7,9]
>>> total = sum_list(nums)
>>> total
45

Далі, давайте дізнаємося про вбудовану функцію sum(). Він не тільки стислий, але й надійний, оскільки добре працює з декількома ітераціями та типами даних.

Синтаксис функції суми Python

Синтаксис використання функції sum() такий:

sum(iterable, start)

тут,

  • iterable є обов’язковим аргументом. Це може бути будь-який ітератор, для якого дійсна операція підсумовування, наприклад список або кортежі чисел. Виклик функції sum() із рядками Python викликає виняток TypeError (детальніше про це пізніше).
  • початок є необов’язковим аргументом. Часто до обчисленої суми додається числове значення. Це може бути корисним, коли вам потрібно додати постійне значення до результату.

Тепер, коли ми вивчили синтаксис функції Python sum(), давайте використаємо її для підсумовування ітерацій.

Сумування ітерованих елементів за допомогою функції суми

#1. Список

Давайте знайдемо суму чисел у списку nums за допомогою функції sum():

>>> nums = [2,8,5,3,11,7,9]
>>> sum_1 = sum(nums)
>>> sum_1
45

Використання додаткового початкового значення

Щоб додати постійне значення до суми, ми можемо використати функцію sum() із необов’язковим початковим значенням. Тут ми передаємо початкове значення 100 як позиційний аргумент:

>>> sum_start = sum(nums,100)
>>> sum_start
145

Початкове значення також можна вказати як аргумент ключового слова:

>>> sum_start = sum(nums,start=10)
>>> sum_start
55

#2. Кортеж

Функція sum() також працює з кортежами. Ми створюємо кортеж nums_tuple шляхом приведення списку nums до кортежу:

>>> nums_tuple = tuple(nums)
>>> nums_tuple
(2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple)
>>> sum_2
45

#3. встановити

Ми також можемо використовувати функцію sum() із набором чисел:

>>> nums_set = set(nums)
>>> nums_set
{2, 3, 5, 7, 8, 9, 11}

Тут ми транслюємо список nums до набору Python і обчислюємо суму елементів у nums_set.

>>> sum_3 = sum(nums_set)
>>> sum_3
45

#4. Словник

Розглянемо такий student_dict із цифровими ключами. Зверніть увагу, що відбувається, коли ви викликаєте функцію sum() із цим словником як аргументом.

>>> students_dict = {1:106,2:112,3:127}
>>> sum_4 = sum(students_dict)
>>> sum_4
6

Функція sum() за замовчуванням повертає суму ключів.

  Ansible Ad-hoc Command Guide з прикладами

Підсумовування ключів

Ми знаємо, що поведінка за замовчуванням полягає в підсумовуванні ключів словника.

Однак ви можете зробити це більш явним, використовуючи метод словника keys() для доступу до ключів. А потім передайте список ключів функції sum():

>>> sum_keys = sum(students_dict.keys())
>>> sum_keys
6

Підсумовування значень

Якщо замість цього ви хочете підсумувати значення словника, отримайте доступ до значень, викликавши метод values() для об’єкта словника:

>>> sum_vals = sum(students_dict.values())
>>> sum_vals
345

Використання функції суми Python з іншими типами числових даних

Поки що ми бачили, як використовувати функцію sum() з ітерованими цілими числами. Тепер давайте розглянемо пару прикладів з іншими типами числових даних.

Комплексні числа

Функцію sum() також можна використовувати для підсумовування комплексних чисел. У цьому прикладі nums_c — це список комплексних чисел:

>>> nums_c = [3 + 4j, 1 + 2j]
>>> sum_c = sum(nums_c)
>>> sum_c
(4+6j)

Числа з плаваючою комою

Тут ми використовуємо функцію sum(), щоб підсумувати список чисел з плаваючою комою nums_f:

>>> nums_f = [1.8,2.5,3.6,7.2]
>>> sum_f = sum(nums_f)
>>> sum_f
15.100000000000001

📑 Для підвищення точності в результаті додавання чисел з плаваючою комою ви можете використовувати функцію fsum() із математичного модуля для підсумовування ітерованих значень зі значеннями з плаваючою комою.

  Реалізації алгоритмів пошуку в Python

Зведення за допомогою функції суми

Тепер давайте подивимося, як функцію sum() можна використовувати для зведення та конкатенації ітерованих елементів.

Звести список

Припустимо, у нас є вкладений список:

>>> lists = [[2,4,6],[3,5,7]]

Коли ми викликаємо функцію sum(), передаючи цей вкладений список як аргумент разом із порожнім списком як початкове значення:

>>> sum(lists,[])
[2, 4, 6, 3, 5, 7]

Ми бачимо, що вкладений список тепер зведено в один список чисел.

Так само, коли ми думаємо, що список має форму l3 = [l1,l2]функція sum() об’єднує два списки l1 і l2, вкладені в список l3.

📝Як швидку вправу спробуйте використати функцію sum() для інших вкладених ітераторів.

Поширена помилка: не використовуйте функцію Python sum() із рядками

Тому що ми бачили, що функція sum() може бути використана для зведення та конкатенації списків (та інших ітерованих елементів, таких як кортежі); спокусливо думати, що ми можемо використовувати його також для конкатенації рядків.

Але якщо ви спробуєте це зробити, ви зіткнетеся з TypeError:

>>> sum(['a','b','c'],'')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]

Таким чином, функція sum() не може бути використана для підсумовування (або конкатенації) рядків.

Однак, як видно з повідомлення про помилку вище, ви можете використовувати метод join(), щоб об’єднати список рядків в один рядок.

>>> ''.join(['a','b','c'])
'abc'

Висновок

У цьому підручнику ми навчилися використовувати вбудовану функцію sum(), щоб знайти суму всіх елементів у ітераторі. Загальний синтаксис для використання функції sum() такий: sum(iterable, start), де iterable — обов’язковий аргумент, а start — необов’язковий.

Потім ми закодували кілька прикладів, щоб зрозуміти використання функції sum() із ітерованими елементами, такими як списки, кортежі, набори та словники. Пізніше ми розглянули, як функцію sum() можна використовувати для зведення та конкатенації ітерованих елементів, за винятком рядків Python.

Сподіваюся, цей посібник був для вас корисним. Далі, можливо, ви захочете ознайомитися з цим підручником щодо функції карти Python.