Tin tức và phân tích của tất cả các thiết bị di động

Hiểu hàm tính tổng trong Python [With Examples]

Tìm hiểu mọi thứ về sum() trong Python, từ cú pháp đến cách sử dụng nó với các lần lặp khác nhau, với các ví dụ mã hữu ích.

Khi làm việc với các phép lặp Python chẳng hạn như danh sách các số, thao tác phổ biến là tìm tổng của tất cả các phần tử trong danh sách. Chúng ta sẽ gặp các thao tác như vậy khi làm việc với các lần lặp khác, chẳng hạn như bộ dữ liệu và bộ.

Có một số cách khác nhau để thực hiện việc này, nhưng cách được đề xuất của Python là sử dụng hàm sum() tích hợp sẵn.

Ở đây chúng ta sẽ bắt đầu bằng cách xem xét các phương pháp khác, chẳng hạn như lặp và xác định hàm. Tiếp theo, chúng ta sẽ chuyển sang tìm hiểu các ví dụ về cú pháp và mã sum() của Python để hiểu rõ hơn về nó.

Tính tổng các giá trị trong Python Iterable

📋 Bạn có thể code cùng nhau bằng Python REPL. Hoặc bạn có thể sử dụng trình soạn thảo newsblog.pl Python trực tuyến.

Hãy xem xét danh sách các số sau:

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

Mục tiêu của chúng ta là tìm tổng của tất cả các số trong danh sách. Chúng ta sẽ sớm tìm hiểu hàm sum() của Python, nhưng chúng ta sẽ bắt đầu với các phương pháp khác mà chúng ta có thể thực hiện. Chúng bao gồm:

  • Sử dụng vòng lặp for đơn giản
  • Sử dụng hàm less() từ mô-đun functools
  • Xác định chức năng tùy chỉnh

Sử dụng vòng lặp

Để tìm tổng của tất cả các phần tử trong danh sách, chúng ta có thể sử dụng vòng lặp for như sau:

  • Khởi tạo biến tổng bằng 0.
  • Duyệt qua danh sách các số và truy cập từng số.
  • Thêm một số vào tổng.
>>> nums = [2,8,5,3,11,7,9]
>>> total = 0
>>> for num in nums:
...     total += num
...
>>> total
45

Sử dụng chức năng thu nhỏ

Một cách tiếp cận khác để tính tổng các phần tử lặp là sử dụng hàm less(). Hàm rút gọn, được tích hợp trong mô-đun functools của Python, có một hàm và một hàm có thể lặp lại. Và nó làm giảm khả năng lặp lại bằng cách áp dụng liên tục hàm trên các lần lặp.

Ở đây, chúng tôi sử dụng hàm lambda để xác định phép cộng hai số và chuyển danh sách các số dưới dạng có thể lặp lại.

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

Hàm less () cộng hai số tuần tự, từ trái sang phải, cho đến khi nó giảm xuống còn một giá trị tổng duy nhất:

Sử dụng chức năng tùy chỉnh

Chúng ta cũng có thể định nghĩa một hàm tùy chỉnh để thực hiện việc này. Ở đây chúng ta định nghĩa hàm sum_list:

  • Nó lấy một danh sách các số làm đối số i
  • Trả về tổng các mục trong một danh sách.

Phần thân của hàm sử dụng cấu trúc vòng lặp mà chúng ta đã thảo luận trước đó. Nhưng việc xác định một hàm sẽ cho chúng ta khả năng sử dụng lại nó.

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

Gọi sum_list() bằng số sẽ trả về tổng là 45:

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

Tiếp theo, hãy khám phá hàm sum() tích hợp sẵn. Nó không chỉ ngắn gọn mà còn mạnh mẽ vì nó hoạt động tốt với một số lần lặp và kiểu dữ liệu.

Cú pháp hàm tính tổng trong Python

Cú pháp hàm sum() như sau:

sum(iterable, start)

Đây,

  • khả năng lặp lại là một đối số bắt buộc. Đây có thể là bất kỳ lần lặp nào mà phép tính tổng hợp lệ, chẳng hạn như danh sách hoặc bộ số. Việc gọi sum() bằng chuỗi Python sẽ đưa ra một ngoại lệ TypeError (sẽ nói thêm về điều đó sau).
  • bắt đầu là một đối số tùy chọn. Đây thường là một giá trị số được thêm vào tổng được tính. Điều này có thể hữu ích khi bạn cần thêm một giá trị không đổi vào kết quả.

Bây giờ chúng ta đã biết cú pháp của sum() trong Python, hãy sử dụng nó để tính tổng các lần lặp.

Tóm tắt các đối tượng có thể lặp lại bằng hàm tính tổng

# 1. Danh sách

Hãy tìm tổng các số trong danh sách nums bằng hàm sum():

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

Sử dụng giá trị hạt giống tùy chọn

Để thêm một giá trị không đổi vào tổng, chúng ta có thể sử dụng hàm sum() với giá trị ban đầu tùy chọn. Ở đây chúng ta chuyển giá trị bắt đầu là 100 làm đối số vị trí:

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

Giá trị ban đầu cũng có thể được cung cấp dưới dạng đối số từ khóa:

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

#2. ngắn

sum() cũng hoạt động với các bộ dữ liệu. Chúng ta tạo một nums_tuple bằng cách chuyển danh sách các num thành một tuple:

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

#3. cài đặt

Chúng ta cũng có thể sử dụng hàm sum() với một tập hợp số:

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

Ở đây, chúng tôi đưa danh sách các số vào một tập hợp python và tính tổng các phần tử trong nums_set.

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

#4. Từ điển

Hãy xem xét tệp sinh viên_dict sau đây có các phím số. Hãy chú ý điều gì sẽ xảy ra khi bạn gọi sum() với từ điển này làm đối số.

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

Hàm sum() trả về tổng của các khóa theo mặc định.

Tóm tắt chính

Chúng tôi biết rằng hành vi mặc định là tính tổng các khóa từ điển.

Tuy nhiên, bạn có thể làm cho nó rõ ràng hơn bằng cách sử dụng phương thức từ điển key() để truy cập các khóa. Và sau đó chuyển danh sách các khóa cho hàm sum():

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

Thêm giá trị

Thay vào đó, nếu bạn muốn tính tổng các giá trị từ điển, hãy truy cập các giá trị bằng cách gọi phương thức value() trên đối tượng từ điển:

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

Sử dụng hàm tính tổng của Python với các kiểu dữ liệu số khác

Cho đến nay chúng ta đã thấy cách sử dụng sum() với các phép lặp số nguyên. Bây giờ hãy xem một số ví dụ với các kiểu dữ liệu số khác.

Số phức

Hàm sum() cũng có thể được sử dụng để tính tổng các số phức. Trong ví dụ này, nums_c là danh sách các số phức:

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

Số dấu phẩy động

Ở đây chúng ta sử dụng hàm sum() để tính tổng danh sách các số dấu phẩy động nums_f:

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

📑 Để tăng độ chính xác khi thêm số dấu phẩy động, bạn có thể sử dụng hàm fsum() từ mô-đun toán học để tính tổng các giá trị dấu phẩy động có thể lặp lại.

Làm phẳng với hàm tổng

Bây giờ hãy xem sum() có thể được sử dụng như thế nào để làm phẳng và kết hợp các phép lặp.

Làm phẳng danh sách

Giả sử chúng ta có một danh sách lồng nhau:

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

Khi chúng ta gọi sum(), chuyển danh sách lồng nhau này làm đối số cùng với danh sách trống làm giá trị ban đầu:

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

Chúng ta có thể thấy rằng danh sách lồng nhau hiện đã được làm phẳng thành một danh sách số duy nhất.

Tương tự, khi chúng ta coi danh sách là l3 = [l1,l2]hàm sum() nối hai danh sách l1 và l2 lồng nhau trong danh sách l3.

📝 Như một bài tập nhanh, hãy thử sum() trên các phép lặp lồng nhau khác.

Cạm bẫy thường gặp: không sử dụng hàm sum() của Python với chuỗi

Bởi vì chúng ta đã thấy rằng sum() có thể được sử dụng để làm phẳng và nối các danh sách (và các phép lặp khác như bộ dữ liệu); thật hấp dẫn khi nghĩ rằng chúng ta cũng có thể sử dụng nó để nối các chuỗi.

Nhưng nếu bạn cố gắng làm điều đó, bạn sẽ gặp phải 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]

Vì vậy, sum() không thể được sử dụng để tính tổng (hoặc nối) chuỗi.

Tuy nhiên, như bạn có thể thấy trong thông báo lỗi ở trên, bạn có thể sử dụng phương thức join() để kết hợp danh sách các chuỗi thành một chuỗi duy nhất.

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

Ứng dụng

Trong hướng dẫn này, chúng ta đã học cách sử dụng hàm sum() tích hợp để tìm tổng của tất cả các phần tử trong một iterable. Cú pháp chung của hàm sum() là sum(iterable, start), trong đó iterable là đối số bắt buộc và start là tùy chọn.

Sau đó, chúng tôi đã viết mã một số ví dụ để hiểu cách sử dụng sum() với các lần lặp như danh sách, bộ dữ liệu, bộ và từ điển. Sau đó, chúng ta đã xem xét cách sum() có thể được sử dụng để làm phẳng và kết hợp các phép lặp—ngoại trừ các chuỗi trong Python.

Tôi hy vọng hướng dẫn này hữu ích cho bạn. Sau đó, bạn có thể xem hướng dẫn này về các hàm bản đồ trong python.