۳۰ قطعه کد مفید پایتون که باید با آنها آشنا باشید — راهنمای کاربردی
پایتون به یکی از محبوبترین زبانهایی تبدیل شده است که در حوزههای علم داده و یادگیری ماشین، توسعه وب، اسکریپتنویسی، اتوماسیون و حوزههای بسیار دیگر مورد استفاده قرار میگیرد. بخشی از دلیل این محبوبیت گسترده، سادگی و سهولت یادگیری آن است. شما که این مطلب را برای مطالعه انتخاب کردهاید، به احتمال بالا هم اینک از پایتون استفاده میکنید یا دستکم به آن علاقهمند هستید. در این مقاله به طور مختصر 30 قطعه کد مفید پایتون را معرفی میکنیم که میتوانید به سرعت آنها را یاد بگیرید و در امور روزمره خود در زمینههای مختلف به کار بگیرید.
1. همه عناصر یکتا
متد زیر بررسی میکند که آیا در لیست مفروض عناصر تکراری وجود دارد یا نه.
این متد از مشخصه ()set برای حذف عناصر تکراری از لیست استفاده میکند:
1def all_unique(lst):
2 return len(lst) == len(set(lst))
3
4
5x = [1,1,2,2,3,2,3,4,5,6]
6y = [1,2,3,4,5]
7all_unique(x) # False
8all_unique(y) # True
2. آناگرام
این متد بررسی میکند که آیا دو رشته آناگرام هم هستند یا نه. منظور از آناگرام کلمه یا اصطلاحی است که از طریق بازچیدمان حروف کلمه یا اصطلاح دیگری به دست آمده باشد و به طور معمول حروف کلمه اصلی دقیقاً یک بار مورد استفاده قرار میگیرند:
1from collections import Counter
2
3def anagram(first, second):
4 return Counter(first) == Counter(second)
5
6
7anagram("abcd3", "3acdb") # True
3. حافظه
قطعه کد زیر میزان استفاده از حافظه یک شیء را بررسی میکند:
1import sys
2
3variable = 30
4print(sys.getsizeof(variable)) # 24
برای بررسی کدهای بیشتر میتوانید مطلب کدهای پایتون آماده کاربردی و ضروری برای برنامه نویسان مبتدی تا حرفه ای را از مجله فرادرس مطالعه کنید.
4. اندازه بایت
این متد طول یک رشته از بایتها را با استفاده از تابع Return در پایتون بازگشت میدهد:
1def byte_size(string):
2 return(len(string.encode('utf-8')))
3
4
5byte_size('?') # 4
6byte_size('Hello World') # 11
5. پرینت یک رشته به میزان N بار
قطعه کد زیر یک رشته را n بار بدون استفاده از حلقه پرینت میکند:
1n = 2;
2s ="Programming";
3
4print(s * n); # ProgrammingProgramming
6. بزرگنویسی حروف اول
قطعه کد زیر از متد ()title برای بزرگنویسی حروف اول همه کلمات یک رشته بهره میگیرد:
1s = "programming is awesome"
2
3print(s.title()) # Programming Is Awesome
7. Chunk
این متد یک لیست را بر اساس اندازه تعیین شده به لیستهای کوچکتری تقسیمبندی میکند:
1def chunk(list, size):
2 return [list[i:i+size] for i in range(0,len(list), size)]
8. Compact
این متد با استفاده از ()filter مقادیر نادرست (False ،None ،0 و “”) را از یک لیست حذف میکند:
1def compact(lst):
2 return list(filter(bool, lst))
3
4
5compact([0, 1, False, 2, '', 3, 'a', 's', 34]) # [ 1, 2, 3, 'a', 's', 34 ]
9. Count by
قطعه کد زیر برای محاسبه ترانهاده یک آرایه 2 بعدی مورد استفاده قرار میگیرد:
1array = [['a', 'b'], ['c', 'd'], ['e', 'f']]
2transposed = zip(*array)
3print(transposed) # [('a', 'c', 'e'), ('b', 'd', 'f')]
10. مقایسه زنجیری
با استفاده از متد زیر میتوانید هر نوع عملگری را در یک خط منفرد به صورت چندباره مقایسه کنید:
1a = 3
2print( 2 < a < 8) # True
3print(1 == a < 2) # False
11. جدا شده با کاما
قطعه کد زیر برای تبدیل یک لیست از رشتهها به رشته منفرد استفاده میشود، به طوری که هر عنصر از لیست با کاما جدا شده باشد:
1hobbies = ["basketball", "football", "swimming"]
2
3print("My hobbies are:") # My hobbies are:
4print(", ".join(hobbies)) # basketball, football, swimming
12. به دست آوردن حروف صدادار
قطعه کد زیر حروف صدادار انگلیسی (یعنی a، e، i، o و u) را در یک رشته پیدا میکند:
1def get_vowels(string):
2 return [each for each in string if each in 'aeiou']
3
4
5get_vowels('foobar') # ['o', 'o', 'a']
6get_vowels('gym') # []
13. خروج از حالت حروف بزرگ
متد زیر برای تبدیل حروف اول رشته مفروض به حروف کوچک استفاده میشود:
1def decapitalize(str):
2 return str[:1].lower() + str[1:]
3
4
5decapitalize('FooBar') # 'fooBar'
6decapitalize('FooBar') # 'fooBar'
14. مسطح سازی
قطعه کد زیر با استفاده از متدهای بازگشتی لیستهای تو در تو را به لیستهای مسطح تبدیل میکند:
1def spread(arg):
2 ret = []
3 for i in arg:
4 if isinstance(i, list):
5 ret.extend(i)
6 else:
7 ret.append(i)
8 return ret
9
10def deep_flatten(xs):
11 flat_list = []
12 [flat_list.extend(deep_flatten(x)) for x in xs] if isinstance(xs, list) else flat_list.append(xs)
13 return flat_list
14
15
16deep_flatten([1, [2], [[3], 4], 5]) # [1,2,3,4,5]
15. تفاوت
این متد تفاوت بین دو عنصر تکرارپذیر را با نگهداشتن آیتمهای مشترک بر مبنای عنصر اول پیدا میکند:
1def difference(a, b):
2 set_a = set(a)
3 set_b = set(b)
4 comparison = set_a.difference(set_b)
5 return list(comparison)
6
7
8difference([1,2,3], [1,2,4]) # [3]
16. تفاوت با...
متد زیر تفاوت بین دو لیست را پس از اعمال تابع روی تک تک عناصر هر دو لیست بازگشت میدهد:
1def difference_by(a, b, fn):
2 b = set(map(fn, b))
3 return [item for item in a if fn(item) not in b]
4
5
6from math import floor
7difference_by([2.1, 1.2], [2.3, 3.4], floor) # [1.2]
8difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x']) # [ { x: 2 } ]
17. فراخوانی زنجیری توابع
چندین تابع را میتوان در یک خط منفرد فراخوانی کرد:
1def add(a, b):
2 return a + b
3
4def subtract(a, b):
5 return a - b
6
7a, b = 4, 5
8print((subtract if a > b else add)(a, b)) # 9
18. بررسی وجود عناصر تکراری
متد زیر با استفاده از این واقعیت که ()set تنها شامل عناصر یکتا است، بررسی میکند آیا یک لیست مقادیر تکراری دارد یا نه:
1def has_duplicates(lst):
2 return len(lst) != len(set(lst))
3
4
5x = [1,2,3,4,5,5]
6y = [1,2,3,4,5]
7has_duplicates(x) # True
8has_duplicates(y) # False
19. ادغام دو دیکشنری
متد زیر برای ادغام دو دیکشنری استفاده میشود:
1def merge_two_dicts(a, b):
2 c = a.copy() # make a copy of a
3 c.update(b) # modify keys and values of a with the ones from b
4 return c
5
6
7a = { 'x': 1, 'y': 2}
8b = { 'y': 3, 'z': 4}
9print(merge_two_dicts(a, b)) # {'y': 3, 'x': 1, 'z': 4}
در پایتون 3.5 و بالاتر میتوان ادغام دو دیکشنری را به صورت زیر نیز انجام داد:
1def merge_dictionaries(a, b)
2 return {**a, **b}
3
4
5a = { 'x': 1, 'y': 2}
6b = { 'y': 3, 'z': 4}
7print(merge_dictionaries(a, b)) # {'y': 3, 'x': 1, 'z': 4}
20. تبدیل دو لیست به یک دیکشنری
متد زیر برای تبدیل دو لیست به یک دیکشنری مورد استفاده قرار میگیرد:
1def to_dictionary(keys, values):
2 return dict(zip(keys, values))
3
4
5keys = ["a", "b", "c"]
6values = [2, 3, 4]
7print(to_dictionary(keys, values)) # {'a': 2, 'c': 4, 'b': 3}
21. استفاده از enumerate
قطعه کد زیر نشان میدهد که میتوان از enumerate برای دریافت مقادیر و همچنین اندیسهای لیستها استفاده کرد:
1list = ["a", "b", "c", "d"]
2for index, element in enumerate(list):
3 print("Value", element, "Index ", index, )
4# ('Value', 'a', 'Index ', 0)
5# ('Value', 'b', 'Index ', 1)
6#('Value', 'c', 'Index ', 2)
7# ('Value', 'd', 'Index ', 3)
22. زمان صرف شده
قطعه کد زیر برای محاسبه زمان صرف شده برای اجرای یک کد خاص کاربرد دارد:
1import time
2
3start_time = time.time()
4
5a = 1
6b = 2
7c = a + b
8print(c) #3
9
10end_time = time.time()
11total_time = end_time - start_time
12print("Time: ", total_time)
13
14# ('Time: ', 1.1205673217773438e-05)
23. Try else
شما میتوانید else را به عنوان بخشی از یک بلوک try/except داشته باشید که در صورت عدم وجود استثنا اجرا میشود:
1try:
2 2*3
3except TypeError:
4 print("An exception was raised")
5else:
6 print("Thank God, no exceptions were raised.")
7
8#Thank God, no exceptions were raised.
24. بیشترین فراوانی
متد زیر عنصر دارای بیشترین فراوانی را در یک لیست بازگشت میدهد:
1def most_frequent(list):
2 return max(set(list), key = list.count)
3
4
5numbers = [1,2,1,2,3,2,1,4,2]
6most_frequent(numbers)
25. پالیندروم
متد زیر بررسی میکند آیا یک رشته پالیندروم است یا نه. پالیندروم به کلماتی گفته میشود که وقتی از انتها به ابتدا خوانده میشوند نیز همانند جهت ابتدا به انتها هستند. مانند درد، نادان و غیره.
1def palindrome(a):
2 return a == a[::-1]
3
4
5palindrome('mom') # True
26. ماشین حساب بدون if-else
قطعه کد زیر نشان میدهد که چطور میتوان یک ماشین حساب را بدون استفاده از گزارههای شرطی if-else نوشت.
1import operator
2action = {
3 "+": operator.add,
4 "-": operator.sub,
5 "/": operator.truediv,
6 "*": operator.mul,
7 "**": pow
8}
9print(action['-'](50, 25)) # 25
27. Shuffle
قطعه کد زیر برای تصادفی سازی ترتیب عناصر در یک لیست با استفاده از ماژول Random در پایتون استفاده میشود. توجه کنید که shuffle درجا عمل میکند و مقدار none بازگشت میدهد:
1from random import shuffle
2
3foo = [1, 2, 3, 4]
4shuffle(foo)
5print(foo) # [1, 4, 3, 2] , foo = [1, 2, 3, 4]
28. Spread
این متد یک لیست را مانند [].concat(…arr) در جاوا اسکریپت مسطح میسازد:
1def spread(arg):
2 ret = []
3 for i in arg:
4 if isinstance(i, list):
5 ret.extend(i)
6 else:
7 ret.append(i)
8 return ret
9
10
11spread([1,2,3,[4,5,6],[7],8,9]) # [1,2,3,4,5,6,7,8,9]
29. تعویض مقادیر
یک روش سریع برای تعویض دو متغیر بدون الزام به استفاده از متغیر سوم:
1a, b = -1, 14
2a, b = b, a
3
4print(a) # 14
5print(b) # -1
30. دریافت مقدار پیشفرض برای کلیدهای مفقود
قطعه کد زیر نشان میدهد که چگونه میتوانید یک مقدار پیشفرض را در حالتی که کلید مورد نظر در دیکشنری موجود نباشد به دست آورید:
1d = {'a': 1, 'b': 2}
2
3print(d.get('c', 3)) # 3
بدین ترتیب به پایان این راهنمای سریع و کاربردی در مورد قطعه کدهای مفید پایتون میرسیم. برای مشاهده موارد بیشتر میتوانید به این ریپو (+) مراجعه کنید.
سلام خسته باشید
ببخشید من یه کد کوتاه در حد یکی دو خط که فقط معنای مقاومت یا جلوگیری از ورود یا به معنای ادامه بده میخوام نمیخوام کار کنه فقط میخوام همچین معنی بده چون برا برنامه نویسی نمی خوام
کد منضورم بود سوتی دادم 🤦♂️
با سلام درتابع کانتوری درپایتون اگر.بخواییم جهات رو لحاظ کنیم تتا رو پیدا کنیم یعنی زاویه ای که با محورxها می سازه چه کدی رو باید اضافه کنیم ؟
سلام خیلی ممنون استفاده کردم و یکی از کد ها رو کپی کردم با ذکر منبع
سلام
اگه لطف کنید و کد جابجایی خودار نشانه گر موس روی برنامه ها رو بزارید.
با تشکر از شما
میتونی یه کار دیگه هم بکنی برای کپی کد ها بدون حلقه دقیقا این کود رو بنویس فقط به جای علامت سوال عدد دلخواهت رو بزار
(?*”HELLO”)Print
مثلا این HELLO رو مینویسه میتونی یه چیز دیگه هم بزاری راستی * به معنی ضرب هست و ** با معنی توان یعنی اگه بنویسی
(3**”hello”)print
باخطا رو برو میشی علتش هم اینکه که hello کلمه هست مقدار نیست که به خودش ضرب بشه یکم ریاضی قاتیش داره
ضرب*=×; توان**=^;
جمع=+