داخلی (built-in)
| تابع | کار | مثال | نتیجه |
|---|---|---|---|
max() |
بیشترین مقدار (روی رشته = آخرین حرف الفبا) | max('Hello world') |
'w' |
min() |
کمترین مقدار | min('Hello world') |
' ' (space) |
len() |
طول رشته/لیست | len('Hello world') |
11 |
int() |
تبدیل به صحیح (قطع اعشار) | int(3.99999) |
3 |
float() |
تبدیل به اعشاری | float('3.14159') |
3.14159 |
نکته:
int()روی عدد اعشاری، رند نمیکنه، فقط اعشار رو قطع میکنه (نه گرد به بالا/پایین)
اعمال تابع روی لیست با map
map()یک تابع رو روی تکتک عضوهای یک لیست (یا هر iterable) اجرا میکنه و یک نتیجهی جدید برمیگردونه
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # [1, 4, 9, 16]- بدون lambda هم میشه از یک تابع معمولی استفاده کرد:
def square(x):
return x ** 2
squared = list(map(square, numbers))جستجوی مقادیر مشخص در لیست با filter
filter()از بین عضوهای یک لیست، فقط اونهایی که شرطTrueبرمیگردونن رو نگه میداره
numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4, 6]- تفاوت با
map:mapهمهی عضوها رو تبدیل میکنه،filterفقط بعضیها رو انتخاب میکنه (خروجیش کوچیکتر یا مساوی ورودیه)
جفت سازی مقادیر چند لیست با zip
zip()چند لیست رو عضو به عضو با هم جفت میکنه
names = ['Ali', 'Sara', 'Reza']
ages = [25, 30, 28]
zipped = list(zip(names, ages))
print(zipped) # [('Ali', 25), ('Sara', 30), ('Reza', 28)]- کاربرد رایج: پیمایش همزمان دو لیست
for name, age in zip(names, ages):
print(name, age)- اگه طول لیستها متفاوت باشه،
zipبه اندازهی کوتاهترین لیست جلو میره
ترکیب هر سه با هم
names = ['Ali', 'Sara', 'Reza']
scores = [15, 8, 19]
# فقط اسم کسایی که نمرهشون بالای 10 هست، با یک پسوند "Pass" جلوش
passed = list(map(lambda x: x[0] + ' - Pass',
filter(lambda x: x[1] > 10, zip(names, scores))))
print(passed) # ['Ali - Pass', 'Reza - Pass']هر جا دیدین دارین با یک حلقهی
forروی یک لیست، مقادیرش رو تبدیل یا فیلتر میکنین، احتمالاً میشه همون کار رو با ترکیبmap/filterوlambdaدر یک خط نوشت — ولی اگه منطق پیچیده بشه، خوانایی کد با یک تابع معمولی و حلقهیforبهتره.