گاهی در زمان کار روی پروژههای محاسباتی، دادههای زیادی وجود دارند که باید با یکدیگر جمع بسته شوند. برای کار با اعداد، محیط محاسباتی کاملی توسط زبان برنامهنویسی پایتون طراحی شده است. بهترین روش برای جمع بستن دادهها استفاده از تابع sum در پایتون است. در این مطلب از مجله فرادرس با تابع sum آشنا خواهیم شد و نمونه کدهای مرتبط با این تابع را مشاهده میکنیم. همچنین انواع کاربردهای این تابع، از تکنیکهای ساده گرفته تا پیشرفتهترین تکنیکهای کاربردی را نیز بررسی خواهیم کرد. تابع sum یکی از توابع «Built-In» پایتون است که فرایند جمع کردن اعداد داخل لیست، تاپل یا هر شیء پیمایشپذیر دیگری را در سادهترین حالت ممکن انجام میدهد.
چه دانشجویی باشید که به تازگی با زبان برنامهنویسی پایتون آشنا شده یا برنامهنویس حرفهای باشید که بهدنبال تقویت مهارتهای خود است، داشتن دانش استفاده صحیح و کامل از تابع sum بهطرز چشمگیری عملکرد کدنویسی را ارتقا میدهد. در این مطلب بهطور عمیق به بررسی تابع sum پرداخته و مثالهای کاربردی ارائه کردهایم. همچنین مشکلات احتمالی زمان استفاده از این تابع و راه حلهای این مشکلات را نیز بررسی کردهایم. در آخر این مطلب به درک عمیقی از تابع sum در پایتون دست یافته و با موثرترین روش استفاده از این تابع در پروژههای برنامهنویسی آشنا خواهیم شد.
چگونه از تابع sum در پایتون استفاده کنیم؟
تابع sum در پایتون برای جمع بستن اعضای درون هر شیء پیمایشپذیری مانند لیستها، تاپلها و غیره استفاده میشود. برای استفاده از تابع sum باید به روش زیر عمل کرد.
- در ابتدا باید لیستی از اعداد را درون پرانتزهای تابع sum قرار داد.
- لیست اشاره شده مرحله قبل بهصورت نام متغیر لیست sum(list)
یا خود لیست sum([2, 4, 5, …])
میتواند باشد.
- میتوان پارامتری به نام start را نیز به تابع sum ارسال کرد. مقدار این پارامتر با حاصل جمع اعضای درون لیست جمع میشود.
در پایین نمونه سادهای از عملکرد این تابع را مشاهده میکنید.
1numbers = [1, 2, 3, 4, 5]
2total = sum(numbers)
3print(total)
4
5# Output:
6# 15
در مثال بالا، لیستی از اعداد 1 تا 5 در اختیار داریم. از تابع sum برای محاسبه حاصل جمع همه این اعداد با یکدیگر استفاده میکنیم. نتیجه این عملیات برابر با عدد 15 میشود. مثال بالا کاربرد بسیار سادهای از تابع sum در پایتون را نمایش میدهد. تابع sum برای اجرای عملیات جمع بر روی اشیا پیمایشپذیر از ضروریترین ابزارهای پایتون است.
تابع sum در پایتون چیست؟
تابع sum، یکی از توابع درونی اختصاصی پایتون است. این تابع برای برای جمع بستن عناصر درون اشیا پیمایشپذیر و بر گرداندن نتیجه نهایی استفاده میشود. از نمونه اشیا پیمایشپذیر میتوان به لیستها، تاپلها و غیره اشاره کرد. تابع sum یکی از روشهای موثر و ساده برای اجرای عملیات جمع در پایتون است.
در کد پایین میتوانید مثال ساده دیگری از کدنویسی با استفاده از این تابع را مشاهده کنید.
1# Here is a list of numbers
2digits = [4, 2, 9, 3, 5]
3
4# Using the sum function to add all numbers in the list
5total = sum(digits)
6
7print(total)
8
9# Output:
10# 23
در مثال بالا لیستی از اعداد به نام digits
داریم. از تابع sum()
برای جمع بستن همه اعضای این لیست استفاده کردهایم. نتیجه اجرای این تابع برابر با عدد 23
میشود. مثال بالا نمونه یکی از کاربردهای بسیار پایه تابع sum()
است.
مزایای استفاده از تابع sum در پایتون
استفاده از تابع sum()
روش سریع و موثری جهت محاسبه حاصل جمع عناصر درون شیء پیمایشپذیر است. این تابع بهصورت درونی در پایتون تعریف شده پس برای استفاده از این تابع نیازی به «Import» هیچ ماژول خاصی یا بهکار بردن حلقه اضافی وجود ندارد.
مشکلات احتمالی
با اینکه تابع sum()
ابزار قدرتمندی است توجه به این نکته که این تابع میتواند فقط اعداد را جمع ببندد مهم است. برای مثال اگر از تابع sum در پایتون بر روی لیستی شامل عناصری از جنس «رشته» استفاده کنید برنامه خطای TypeError
را بر میگرداند. همچنین تابع sum در برخورد با مجموعه دادههای بزرگ کندتر از سایر روشهای محاسبه جمع اعداد عمل میکند. پس بسیار مهم است که در زمان کار با تابع sum اندازه و نوع دادههای مجموعه پیمایشپذیر تحت اجرای عملیات محاسباتی را در نظر بگیرید.
چطور بیشتر به پایتون مسلط شویم؟
زبان برنامهنویسی پایتون با سادگی در استفاده و داشتن کاربردهای متنوع شناخته میشود. این زبان طیف وسیعی از توابع درونی را برای انجام سریعتر و راحتتر وظایف برنامهنویسی ارائه میدهد که تابع sum در پایتون نیز یکی از همین توابع درونی است. برای اینکه بتوانید در محاسبات عددی با زبان برنامهنویسی پایتون بهصورت حرفهایتری کدنویسی کنید و برنامههای کاربردیتری بنویسید باید با دو مفهوم مهم زیر آشنا باشید.
در فرادرس برای هر دو مطلب بالا فیلمهای آموزشی با کیفیتی تهیه شده که در افزایش مهارت دانشجویان برنامهنویسی تاثیر زیادی دارند.
راهنمای پیشرفته برای کار با تابع sum
همزمان با افزایش مهارت در کار با تابع sum در مسائل پیشرفتهتر نیز میتوان از این تابع استفاده کرد. دامنه کاری تابع sum فقط محدود به دادههای درون لیست نیست. بلکه تابع sum میتواند روی ساختارهای پیچیدهتری نیز عملیات خود را انجام. ساختارهایی مانند لیستهای تو در تو یا لیستهایی که خود شامل عناصری از جنس لیست هستند. علاوه بر این، تابع sum میتواند پارامتر اختیاری به نام «start» نیز دریافت کند. کار این پارامتر مشخص کردن مقداری است که به حاصل جمع اضافه میشود.
برای آشنایی بیشتر با سایر توابع محاسباتی میتوانید به فیلم آموزشی محاسبات عددی در پایتون از فرادرس مراجعه کنید.
جمع بستن لیست های تو در تو
فرض کنیم که لیستی از لیستها -لیست تو در تو- در اختیار داریم. دادههای داخل لیستهای درونی از جنس عدد هستند. میخواهیم همه اعداد درون لیستها را با یکدیگر جمع ببندیم. روش انجام این کار را در کد پایین، پیادهسازی کردهایم.
1# Here is a list of lists
2nested_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3
4# Using the sum function with a generator expression to add all numbers
5grand_total = sum(sum(sublist) for sublist in nested_lists)
6
7print(grand_total)
8
9# Output:
10# 45
در مثال بالا، از نوع خاصی از اصطلاحات «مولد» (Generator) استفاده کردهایم. اصطلاح Generator آمده پایین بهصورت تخصصی در مسئله بالا برای محاسبه مجموع اعداد درون همه زیر لیستها بهکار میرود.
(sum(sublist) for sublist in nested_lists)
در نهایت دوباره از تابع sum استفاده کردهایم تا نتیجه جمع این حاصل جمعها را محاسبه کنیم. نتیجه نهایی درون متغیر grand_total
قرار میگیرد. در خط آخر، کد با استفاده از تابع print()
و مقدار متغیر grand_total
حاصل جمع اعداد درون همه لیستها را نمایش میدهد.
استفاده از پارامتر start
یکی از امکانات تابع sum در پایتون دریافت پارامتر اختیاری به نام «start» است. مقدار این پارامتر به نتیجه محاسبه حاصل جمع عناصر لیست دریافت شده توسط تابع sum اضافه میشود. در کد پایین میتوانید مثالی از استفاده پارامتر start را ببینید.
1# Here is a list of numbers
2numbers = [1, 2, 3, 4, 5]
3
4# Using the sum function with a start parameter
5total = sum(numbers, 10)
6
7print(total)
8
9# Output:
10# 25
در مثال بالا، مقدار عدد 10 را به عنوان پارامتر start به تابع sum ارسال کردیم. تابع sum نیز این مقدار را به نتیجه حاصل جمع همه عناصر درون لیست اضافه کرده و در نتیجه مقدار نهایی برابر با عدد 25 شده است.
بررسی گزینه های جایگزین ممکن برای تابع sum در پایتون
با اینکه تابع sum ابزار بسیار قدرتمندی برای جمع اعداد در پایتون است، تنها راه انجام این عملیات محاسباتی نیست. روشهای دیگری نیز وجود دارند که میتوانید از آنها بسته به نوع نیاز خود یا ماهیت دادههای خود استفاده کنید. در این بخش دو مورد از این روشهای جایگزین را بررسی کردهایم.
- تابع reduce
که درون ماژول functools
تعریف شده است.
- تکنیک «List Comprehension» که برای تعریف لیست جدید توسط دادههای لیستهای دیگر توسعه داده شده است.
در مجله فرادرس مطالب بسیار خوب و کاملی برای آشنایی درباره انواع عملگرهای پایتون ارائه شده است.
استفاده از تابع reduce
تابع reduce
قسمتی از ماژول functools
در پایتون است. این تابع برای اِعمال تابع مشخص شدهای بر روی همه عناصر لیست تعیین شده استفاده میشود. در واقع این تابع دو پارامتر ورودی دریافت میکند. پارامتر اول تابعی است که باید بر روی عناصر لیست اعمال شود و پارامتر دوم لیستی است که تابع پارامتر اول بر روی عناصر آن اعمال خواهد شد.
به کد زیر توجه کنید. در این کد، مثال سادهای از روش کار تابع reduce
پیادهسازی شده است. در این مثال از تابع reduce
برای انجام عملیات محاسباتی مانند تابع sum استفاده شده است.
1from functools import reduce
2import operator
3
4numbers = [1, 2, 3, 4, 5]
5
6# Using the reduce function to add all numbers in the list
7total = reduce(operator.add, numbers)
8
9print(total)
10
11# Output:
12# 15
در مثال بالا، در خط اول، تابع reduce
را از کتابخانه functools
و در خط دوم کتابخانه operator
را درون محیط کدنویسی پایتونی ایمپورت کردهایم. در ادامه، داخل بدنه کدها از تابع add
تعریف شده درون کتابخانه operator
نیز برای حل این مسئله استفاده کردیم. در نهایت هم تابع add
با استفاده از تابع reduce
بر روی همه اعضای لیست numbers
اعمال شده است. نتیجه نهایی این عملیات برابر با مقدار 15 میشود.
استفاده از تکنیک List Comprehension
تکنیک List Comprehension یکی از راههای کوتاه شده برای تعریف لیست در پایتون است. همچنین میتوان از این تکنیک برای اضافه کردن عناصر جدید نیز به لیست استفاده کرد. البته باید توجه داشت که استفاده از این تکنیک نسبت به استفاده از تابع sum در پایتون کمی پیچیدهتر است. به مثالی که در ادامه آمده دقت کنید.
1numbers = [1, 2, 3, 4, 5]
2
3# Using list comprehension to add all numbers in the list
4total = sum([num for num in numbers])
5
6print(total)
7
8# Output:
9# 15
در مثال بالا، برای ساخت لیست جدید از تکنیک List Comprehension استفاده کردیم. لیست جدید شامل همه اعداد درون لیست اصلی است و در نهایت با استفاده از تابع sum همه این اعداد را با یکدیگر جمع بستهایم.
هر دوی این روشها مزایای مخصوص به خود را ارائه میدهند. تابع reduce
چندکاره است و نه تنها برای محاسبه حاصل جمع بلکه میتواند با توابع گوناگون دیگری نیز کار کند. از سوی دیگر، تکنیک List Comprehension ابزار قدرتمندی است که میتواند کد نوشته شده را ساده کند و همچنین خوانایی کد را به میزان قابل توجهی بالاتر ببرد. اگرچه ممکن است که هر دوی این روشها نسبت به استفاده از تابع sum در زمان کار با مجموعه دادههای بزرگ کندتر عمل کنند. پس در زمان انتخاب روش حل مسئله مهم است که به اندازه دادهها و جنس نوع دادههای لیست توجه کنید.
عیب یابی تابع sum پایتون در ارتباط با مشکلات رایج
از آنجا که تابع sum در پایتون ابزاری بسیار کاربردی و پر استفاده است، احتمال دارد در زمان کار با این تابع با چند مشکل رایج برخورد کنید. یکی از رایجترین خطاهای ممکن در زمان کار با این تابع خطای TypeError
است. این خطا زمانی رخ میدهد که به اشتباه برای جمع بستن نوع دادههای غیر عددی مانند رشتهها تلاش کنیم. در ادامه مطلب این مشکل را به همراه راهحل بر طرف کردنش بررسی کردهایم.
خطای TypeError – کار با عملوندهای غیر معتبر
در کد پایین مثالی از خطای TypeError
را میبینید که ممکن است در زمان کار با تابع sum به آن بر بخورید.
1# Here is a list of strings
2words = ['Hello', 'World']
3
4try:
5 total = sum(words)
6except TypeError as e:
7 print(f'Error: {e}')
8
9# Output:
10# Error: unsupported operand type(s) for +: 'int' and 'str'
در مثال بالا تلاش کردهایم که تابع sum را بر روی لیستی از دادههای رشتهای اعمال کنیم و در اثر این عملیات با خطای TypeError
روبهرو شدهایم. پیغام خطا میگوید که در حال استفاده از عملگر +
بر روی نوع داده عدد صحیح و نوع داده رشته با یکدیگر هستیم درحالی که انجام این رفتار محاسباتی مجاز نیست. در واقع تابع sum بهصورت درونی از عملگر +
استفاده میکند.
چگونه لیستی از رشته ها را با کمک تابع sum در پایتون با یکدیگر جمع ببندیم؟
اگر لیستی از رشتهها دارید و میخواهید دادههای این لیست را به یکدیگر متصل کنید. میتوانید از متد join
استفاده کنید. این متد یکی از متدهای درونی مخصوص کار با رشتهها در پایتون است. میتوانیم در مثال آمده در پایین، روش استفاده از این متد را ببینیم.
1# Here is a list of strings
2words = ['Hello', 'World']
3
4# Using the join method to join the strings
5total = ' '.join(words)
6
7print(total)
در این مثال، از متد join
به همراه فضای خالی ‘ ‘
به عنوان جداکننده برای اتصال رشتههای درون لیست به یکدیگر استفاده کردهایم. نتیجهای که این برنامه بر میگرداند رشتهای است که شامل همه رشتههای درون لیست اصلی میشود. رشتههای لیست اصلی در رشتهی جدید با استفاده از فضای خالی از یکدیگر جدا شدهاند.
خروجی کد بالا بهصورت زیر برای کاربر به نمایش در میآید.
Hello World
به یاد داشته باشید که تابع sum در پایتون ابزاری قدرتمند است اما مانند هر ابزار دیگری محدودیتهای عملکردی منحصر به خود را دارد. داشتن شناخت و دانستن روش مدیریت این محدودیتها بخش کلیدی از تبدیل شدن به برنامهنویسی حرفهای پایتون است.
شناخت اشیا پیمایش پذیر در پایتون و عملیات جمع
برای اینکه به درک کاملی از قدرت تابع sum در پایتون برسیم، دانستن دو مفهوم بنیادین زیر، ضروری است.
- اشیای پیمایشپذیر در پایتون
- مفهوم عملیات جمع در پایتون
اشیا پیمایش پذیر پایتون مانند لیست ها، تاپل ها و غیره
شی پیمایشپذیر در پایتون هر شیء است که بتواند همه عناصر درون خود را بهصورت یک به یک برگرداند. مثالهای رایجی از اشیا پیمایشپذیر شامل لیستها، تاپلها و رشتههای میشوند. وقتی از تابع sum در پایتون استفاده میکنیم بهطور معمول شیء پیمایشپذیری مانند لیستی از اعداد را به این تابع ارسال میکنیم.
1numbers = [1, 2, 3, 4, 5]
2total = sum(numbers)
3print(total)
4
5# Output:
6# 15
درمثال بالا، numbers
لیستی از اعداد صحیح است که شیء پیمایشپذیر محسوب میشود. تابع sum()
بر روی عناصر این لیست یک به یک پیمایش میکند. همزمان با پیمایش، آنها را با یکدیگر جمع میبندد تا حاصل جمع کلشان را بدست بیاورد.
عملیات جمع در پایتون بر روی داده های غیر عددی
اجرای عملیات جمع در پایتون فقط بر اعداد محدود نمیشود. میتوانیم رشتهها، لیستها و نوع دیگر دادهها را نیز با یکدیگر جمع ببندیم. اگرچه که وقتی از تابع sum در پایتون استفاده میکنیم بهطور معمول هدف جمع بستن دادههای عددی است. اگر سعی کنیم که از تابع sum برای جمع بستن دادههای لیستی از رشتهها استفاده کنیم، پیغام خطای TypeError
را دریافت خواهیم کرد.
به کد پایین نگاه کنید. در این کد تلاش کردیم که خطای TypeError
را مدیریت کنیم.
1words = ['Hello', 'World']
2try:
3 total = sum(words)
4except TypeError as e:
5 print(f'Error: {e}')
6
7# Output:
8# Error: unsupported operand type(s) for +: 'int' and 'str'
در مثال زده شده بالا، سعی کردیم که تابع sum()
را بر روی لیستی از دادههای رشتهای اعمال کنیم که منجر به برگشت دادن خطای TypeError
توسط برنامه شده است. علت بروز خطا این است که تابع sum()
برای کار با اعداد طراحی شده است و نه دادههای رشتهای. اگر بخواهیم که رشتهها به یکدیگر متصل شوند بهجای استفاده از تابع sum()
باید از متد join
استفاده کنیم.
داشتن دانش درباره اشیا پیمایشپذیر و مفهوم عملیات جمع در پایتون باعث میشود که درک عمیقتری نسبت به تابع sum و تواناییهای آن پیدا کنیم.
تابع sum در پایتون در مباحث تحلیل داده و یادگیری ماشین
تابع sum در پایتون بیشتر از ابزار سادهای فقط برای جمع کردن اعداد است. این تابع کاربردهای وسیعتری در حوزههایی مانند تحلیل داده و یادگیری ماشین دارد.
استفاده از تابع sum در پایتون در Data Analysis
در رشته تحلیل داده، اغلب نیاز داریم که محاسبات خود را روی مجموعه دادههای بزرگی انجام دهیم. به سادگی میتوان تابع sum را برای انجام عمل جمع در همه مجموعههای داده عددی استفاده کرد. محاسباتی مثل فروش کل در ماه یا تعداد کل بازدید از سایت در بازه زمانی تعیین شده از جمله کاربردهای ساده تابع sum هستند.
استفاده از تابع sum در پایتون در Machine Learning
در بخش یادگیری ماشین نیز میتوان از تابع sum در الگوریتمهای متفاوتی استفاده کرد. به عنوان مثال، میتوان از کاربردهایی مانند محاسبه مجذور خطاهای رگرسیون خطی یا محاسبه مجموع وزنها در شبکههای عصبی نام برد.
بررسی مفاهیم مرتبط
اگر به تحقیقات بیشتر درباره تواناییهای پایتون در عملیات عددی علاقهمند شدهاید، شاید بخواهید ماژولهای آماری و کتابخانه NumPy را نیز بررسی کنید.
ماژول های آماری پایتون | Python’s Statistics Module
ماژولهای مربوط به آمار در پایتون، توابعی را برای انجام محاسبات آماری ریاضی درباره دادههای عددی فراهم میکنند. این ماژولها شامل توابعی برای محاسبات اندازهگیری موقعیت مرکزی، پراکندگی و غیره میشوند.
کتابخانه NumPy
کتابخانه NumPy یکی از کتابخانههای بسیار قدرتمند پایتون برای انجام محاسبات عددی است. این کتابخانه به غیر از اجرای عمل جمع، طیف وسیعی از توابع ریاضی را حتی بر روی ساختارهای ذخیره داده پیچیدهتر نیز ارائه میدهد. به عنوان چند نمونه از این نوع ساختارهای ذخیره داده میتوان به آرایههای پایتونی و ماتریسهای چند بعدی اشاره کرد. از آنجا که بسیاری از محاسبات علمی و عملیات ریاضی در پروژههای حرفهای بر روی دادههای چندبعدی صورت میگیرد. NumPy با ارائه آرایههای چندبعدی این امکان را میدهد تا به آسانی با این دادهها کار کنیم و به شکل موثری محاسبات خود را انجام دهیم.
در سایت فرادرس برای دانشجویان علاقهمند به برنامهنویسی به زبان پایتون و محاسبات عددی فیلم آموزشی رایگانی درباره استفاده از کتابخانه NumPy برای محاسبات علمی ارائه شده است. که بهصورت مختصر و شفاف اطلاعات بسیار خوبی را درباره کار با این کتابخانه قدرتمند آموزش میدهد. این فیلم آموزشی را ببینید و سوالات احتمالی خود را در بخش مربوط به کامنتها بپرسید تا پاسخ داده شوند.
یادگیری عمیق تر زبان برنامه نویسی پایتون
بعد از مطالعه این مطلب، درصورتی که نسبت به آموزش مهارتهای پیچیدهتر در زبان برنامهنویسی پایتون علاقهمند شدهاید میتوانید از فیلمهای آموزشی که وبسایت فرادرس به این منظور تهیه کرده استفاده کنید. در ادامه چند مورد از این دورهها را معرفی کردهایم.
لازم به ذکر است که اگر بهتازگی وارد دنیای برنامهنویسی شدهاید و علاقهمند به شروع یادگیری پایتون هستید، فرادرس یک فیلم آموزشی ۱۴۰ دقیقهای رایگان ارائه کرده است که میتوانید با دیدن آن با اصول اولیه و کلیدی این زبان برنامهنویسی آشنا شوید.
جمع بندی
تابع sum در پایتون ابزار قدرتمند و درونی برای جمع بستن اعداد داخل اشیا پیمایشپذیر است. این تابع سریع و کارآمد کاربری آسانی نیز دارد. این خواص مهارت کار با تابع sum را به بخش ضروری از تواناییهای هر برنامهنویسی پایتونی تبدیل کرده است.
در طول این مطلب از مجله فرادرس، استفادههای کاربردی تابع sum در پایتون را از سادهترین حالت ممکن تا موارد پیچیده و حرفهای بررسی کردیم. کاربردهای پیشرفتهای که از این تابع بررسی کردیم شامل جمع کردن دادههای لیستهای تو در تو و استفاده از پارامتر start بود. همچنین درباره مشکلات رایج ممکن در زمان کار با این تابع مانند خطای TypeError
و راه حلهای ممکن برای مدیریت این خطاها صحبت کردیم. همانطور که اشاره شد خطای TypeError
در زمان استفاده از تابع sum بر روی دادههای غیر عددی مانند رشتهها پیش میآید.
علاوه بر تابع sum به بررسی روشهای جایگزین موجود برای جمع کردن اعداد در پایتون نیز پرداختیم. این روشها شامل استفاده از تابع reduce
ازکتابخانه functools
و تکنیک «List Comprehension» میشوند. این روشها مزایای مخصوص به خود را دارند و درک صحیح درباره زمان استفاده از هر روش میتواند کدهای نوشته شده را کارآمدتر و خواناتر کند.
به یاد داشته باشید که بهترین روش جمع کردن اعداد در پایتون وابسته به نیاز برنامهتان در آن لحظه و ماهیت نوع دادههای مورد استفاده است. با درک متدهای مختلف و نقاط قوت و ضعف هر کدام میتوانید موثرترین روش را برای پروژه در دست خود انتخاب کنید.
source