تابع Find در پایتون به برنامهنویسان کمک میکند که زیررشتههای مورد نظر خود را از درون رشتههای داده شده پیدا کنند. کار کردن با رشتهها در پایتون یکی از رایجترین وظایف برنامه نویسی است. به همین دلیل زبان برنامه نویسی پایتون متدهای درونی بسیاری دارد که به طور خاص برای ساده کردن کار با نوع داده رشته در پایتون تعریف شدهاند. تابع Find نیز یکی از این متدها است. در این مطلب جامع از مجله فرادرس، به صورت دقیق و با جزئیات به بررسی تابع Find در پایتون میپردازیم و انواع کاربردهای آن را همراه با انواع مثالهای کدنویسی شده ساده و کوچک نمایش میدهیم. تابع Find یکی از متدهای رشته در پایتون است که برای جستوجوی زیررشتهها از درون رشتههای داده شده به کار میرود. این متد، شماره ایندکس اولین رخداد زیررشته مشخص شده را برمیگرداند. البته در صورت پیدا نشدن زیررشته مورد نظر، مقدار ۱- برگشت داده میشود.
تابع Find در پایتون چیست؟
تابع Find یکی از متدهای «درونی» (In-Built) پایتون است که برای پیدا کردن ایندکس زیررشته مشخص شدهای درون رشته بزرگتر بهکار میرود. این تابع مخصوص کار با رشتهها است. در کنار کاربردهای بسیار مفیدش فرایند استفاده بسیار سادهای هم دارد. اگر زیررشته مورد نظر در رشته اصلی پیدا شد، ایندکس اولین کاراکتر آن را برمیگرداند و در غیر این صورت، اگر زیررشته اصلا در رشته داده شده موجود نبود، مقدار ۱- برمیگرداند.
تابع Find روش استفاده بسیار سادهای دارد. فقط باید این تابع را بر روی شیء رشته موجود، فراخوانی کرد و زیررشته مورد نظر را نیز به عنوان پارامتر به آن ارسال کرد.
سینتکس تابع Find در پایتون
برای فراخوانی کردن تابع Find، باید سینتکس مربوط به آن را بلد باشیم. در کادر زیر شکل پایه استفاده از این سینتکس را به همراه پارامترهای اضافه آن نمایش دادهایم.
1str_obj.find(sub, start, end)
پارامترها
همینطور که میبینید در سینتکس بالا، سه پارامتر به تابع Find ارسال شده و علاوه بر آن تابع خود Find هم بر روی شیء str_obj اجرا شده است. این شیء همان رشتهای است که در آن به دنبال زیررشته مورد نظر میگردیم. در فهرست زیر، پارامترهای تابع Find را توضیح دادهایم.
- sub : این پارامتر، همان زیررشتهای را نشان میدهد که باید در رشته داده شده اصلی به دنبال آن بگردیم.
- start (اختیاری): موقعیت شروع مکانی را نشان میدهد که عملیات جستوجو در رشته اصلی از آنجا شروع میشود.
- end (اختیاری): موقعیت پایان جستوجو یا ایندکسی را نشان میدهد که عملیات جستوجو باید تا به آنجا ادامه داشته باشد. مقدار متعلق به این موقعیت در زمان جستوجو، بررسی نمیشود.
مقدار برگشتی
تابع Find بعد از اجرا و در صورت پیداکردن زیررشته مورد نظر، پایینترین ایندکس – یا ایندکس اولین کاراکتر از – زیررشته پیدا شده را برمیگرداند. اما در صورت پیدا نشدن زیررشته مورد نظر، مقدار ۱- را به خروجی برمیگرداند.
لازم است که به نکات زیر توجه کنید:
- اگر برای تابع Find مقدار پارامترهای start و end را مشخص نکنیم، به صورت پیشفرض مقادیر ۰ را به عنوان ایندکس شروع و ۱- را به عنوان ایندکس پایانی در نظر میگیرد. بنابراین کل رشته اصلی را جستوجو میکند.
- تابع Find بسیار شبیه به تابع Index در پایتون عمل میکند. تنها تفاوت این دو تابع در مقدار برگشتی آنها است. اگر زیررشته مورد نظر در رشته اصلی پیدا نشد، تابع Find مقدار ۱- و تابع Index خطای استثنا ValueError را برمیگردانند.
روش یادگیری پایتون با کمک فرادرس
بخاطر سطح بالا و تقریبا همهکاره بودن زبان برنامه نویسی پایتون، این زبان به یکی از محبوبترین و رایجترین زبانهای برنامهنویسی در جهان تبدیل شده است. امروزه، برای یادگیری هر دانشی از قبیل برنامهنویسی با زبان پایتون، میتوان از انواع منابع آموزشی استفاده کرد که هر یک، مزایا و معایب خاص خود را دارند. اما در دنیای امروز، یکی از آنها بیشترین نقش را در حوزه آموزش ایفا میکند و آن چیزی نیست بهجز فیلمهای آموزشی. این منبع آموزشی نسبت به سایر منابع، مخصوصا در بحث برنامهنویسی و دیگر علوم کامیپوتری از امتیازات ویژهای برخوردار است.
در حال حاضر، فرادرس با تولید مطالب و فیلمهای آموزشی مختلف به یکی از بزرگترین و قویترین تولیدکنندگان محتوای آموزشی فارسی تبدیل شده است. زبان پایتون نیز به عنوان یکی از پر مخاطبترین دورهها جزو گزینههای هدف فرادرس برای تولید محتواهایی آموزشی ویدئویی و متنی است. در فرادرس تاکید زیادی بر کیفیت بالای محتواهای آموزشی و همه شمول بودن این محتواها میشود. به همین دلیل، فیلمهای بسیار خوبی مخصوصا در زمینه پایتون تهیه شده است. به عنوان گزینهای مناسب برای شروع یادگیری این زبان برنامهنویسی، میتوان از مجموعه آموزش پایتون برای نوجوانان نام برد. که با تمرکز برروی یادگیری مطالب سرگرم کننده و ابتدایی برای نوجوانان و افراد تازه وارد تهیه شده است.
پیشنهاد مناسب دیگری که برای شروع یادگیری زبان برنامهنویسی پایتون میتوان ارائه داد، تماشای فیلم آموزش رایگان برنامه نویسی سریع و آسان پایتون در ۱۴۰ دقیقه از فرادرس است. به غیر از مورد گفته شده، در پایین هم مواردی را معرفی کردهایم. این موراد مربوط به اشخاصی است که دوره آموزش اولیه پایتون را گذرانده و در پی ارتقای سطح مهارتهای خود هستند.
روش استفاده از متد Find
یکی از بهترین روشهای برای یادگیری استفاده از متدهای پایتون، کار با مثالهای عملی است. متد Find یکی از متدهای رشته در پایتون است. بعضی از این متدها با متدهای لیست در پایتون مشترک هستند. به عنوان برنامهنویس، باید کار با همه آنها را در حد نیاز بیاموزیم. برای یادگیری بهتر کدنویسی با پایتون بهتر است که از بررسی مثالهای عملی استفاده کنیم. به همین منظور میتوانیم فیلم آموزش برنامه نویسی پایتون همراه با مثال های عملی از فرادرس را مشاهده کنیم. در ادامه نیز لینک مربوط به این فیلم را قرار دادهایم.
متد String.find() شماره ایندکس زیررشته پیدا شده در رشته اصلی را برمیگرداند. استفاده از تابع Find بسیار ساده است. فقط لازم است که تابع Find را همراه با شیء از جنس رشته فراخوانی کرده و زیررشته مورد نظر را نیز به عنوان پارامتر به این تابع ارسال کنیم.
با کمک مثال پایین سعی میتوان مطلب نوشته شده در بالا را بهتر درک کرد.
1string = " hello world is the first code of every programmer"
2print(string.find("first"))
با اجرای کدهای بالا در خروجی عدد 20 به عنوان جواب نمایش داده میشود.
مثال های بیشتر برای بررسی متد Find
اکنون نگاهی به چند مثال درباره استفاده از String.find() خواهیم داشت و روشهای مختلف استفاده از تابع Find را بررسی میکنیم. در فهرست زیر، انواع مسئلههای قابل حل با کمک تابع Find را بیان کردهایم.
- استفاده از متد Find بدون آرگومانهای شروع start و پایان end
- استفاده از متد Find با آرگومانهای شروع start و پایان end
- یافتن تعداد کل رخدادهای زیررشته
- بررسی اینکه آیا اصلا زیررشته در رشته اصلی موجود است یا نه.
در بخش بعدی، تمام موارد بالا را با کمک مثالهای مربوط به هر کدام کدنویسی کرده و نمایش دادیم.
متد Find بدون آرگومان های start و end
وقتی تابع Find بدون مشخص کردن آرگومانهای start و end فراخوانی میشود، از ابتدا تا به انتهای رشته اصلی را به دنبال اولین رخداد زیررشته داده شده میگردد.
در مثال پایین، متد Find بر روی رشته اصلی «Faradars Blog Team » استفاده شده است و میخواهیم که ایندکس زیررشتههای «Faradars » و «Blog » و «Class » را پیدا کرده و برگردانیم. در صورت پیدا شدن زیررشته مورد نظر، اولین ایندکس آن را برمیگردانیم و در غیر این صورت مقدار ۱- برگردانده میشود.
1word = 'Faradars Blog Team'
2
3# returns first occurrence of Substring
4result = word.find('Faradars')
5print("Substring 'Faradars' found at index:", result)
6
7result = word.find('Blog')
8print("Substring 'Blog' found at index:", result)
9
10# How to use find()
11if word.find('Class') != -1:
12 print("Contains given substring ")
13else:
14 print("Doesn't contains given substring")
در اثر اجرای کد بالا، خروجی زیر در کنسول به کاربر نمایش داده میشود.
Substring 'Faradars' found at index: 0 Substring 'Blog' found at index: 9 Doesn't contains given substring
متد Find با آرگومان های start و end
زمانی که متد Find با آرگومانهای شروع start و پایان end فراخوانی شود، در بخش خاصی از رشته اصلی که تعریف کردیم به دنبال ایندکس اولین رخداد زیررشته داده شده میگردد. این محدوده خاص درون رشته اصلی را با کمک آرگومانهای start و end تعریف میکنیم.
1word = 'Faradars Blog Team'
2print(word.find('radar', 2))
3
4print(word.find('dars ', 2))
5
6print(word.find('a', 4, 10))
7
8print(word.find('Tea ', 4, 11))
خروجی حاصل از اجرای تابع بالا به شکل زیر است.
2 4 5 -1
یافتن تعداد کل رخدادهای زیررشته
همینطور که اشاره کردیم تابع Find یکی از متدهای رشته در پایتون است. برای کار کردن در پایتون تعداد بسیار زیادی متد درونی تعبیه شده که هر کدام رفتار خاصی از خود نشان میدهند. برای آشنا شدن با این متدها میتوانید مطلب از صفر تا صد متدهای رشته در پایتون از مجله فرادرس را مطالعه کنید.
از تابع Find میتوان برای پیدا کردن تعداد کل رخدادهای هر کلمه در رشته نیز استفاده کرد. در کادر زیر کدهای مربوط به پیدا کردن تعداد رخداد کلمه hello را پیادهسازی کردهایم. کاملا مشخص است که تابع Find به بزرگی و کوچکی حروف حساس است.
1main_string = "Hello, hello, Hello, HELLO! , hello"
2sub_string = "hello"
3count_er=0
4start_index=0
5for i in range(len(main_string)):
6 j = main_string.find(sub_string,start_index)
7 if(j!=-1):
8 start_index = j+1
9 count_er+=1
10print("Total occurrences are: ", count_er)
بر اثر اجرای کد بالا، خروجی به صورت پیغام Total occurrences are: 2 به کاربر نمایش داده میشود.
بررسی وجود یا عدم وجود زیررشته در رشته اصلی با کمک تابع Find
در این مثال از تابع Find در پایتون استفاده میکنیم تا ببینیم که آیا زیررشته Python در رشته اصلی Python is powerful. موجود است یا نه. اگر زیررشته وجود داشت، پیغامی برای تایید وجود آن نمایش داده میشود و در غیر این صورت، برنامه پیغامی چاپ میکند که وجود نداشتن زیررشته در رشته اصلی را نشان میدهد.
1text = "Python is powerful."
2substring = "Python"
3
4if text.find(substring) != -1:
5 print(f"The substring '{substring}' exists in the text.")
6else:
7 print(f"The substring '{substring}' does not exist in the text.")
در اثر اجرای کد بالا پیغام زیر بر روی کنسول پایتون چاپ میشود.
The substring 'Python' exists in the text.
کاربرد تابع Find در سناریوهای مربوط به دنیای واقعی
تا به اینجای مطلب، تعریف، سینتکس و مثالهای مختلفی را درباره تابع Find در پایتون پوشش دادیم. این متد برای پیدا کردن زیررشته در رشتههای بزرگتر، بسیار کاربردی است و به همین ترتیب، استفاده بسیار سادهای هم دارد. در این بخش، چند مورد از کاربردهایی را بررسی میکنیم که میتوان با کمک این تابع در سناریوهای مربوط به دنیای واقعی داشت.
تجزیه URL-ها
مسئلهای را در نظر بگیرید که در آن برای پیدا کردن نام دامنه سایت باید آدرس URL را تجزیه کنیم. در کد پایین، درباره روش استفاده از تابع Find در پایتون برای به انجام رساندن این کار، مثالی را ارائه دادهایم.
1url = "https://www.example.com/products/index.html"
2domain_start = len("https://www.")
3domain_end = url.find(".com")
4domain = url[domain_start:domain_end]
5print(domain) # Output: example
در کد بالا ابتدای آدرس مشخص است اما انتهای نام دامنه را با کمک تابع Find پیدا کردیم.
اعتبارسنجی داده ها
فرض کنید در حال ساخت تابعی برای اعتبارسنجی دادههای فرم هستیم. در این فرم، آدرس ایمیل وارد میشود. سپس با هدف سنجیدن اعتبار آدرس ایمیل باید وجود نماد @ را در آن بررسی کنیم. به منظور پیدا کردن نماد @ میتوانیم از متد Find برای جستوجو در آدرس داده شده استفاده کنیم.
هرچند این تابع به تنهایی روش مناسبی برای بررسی ساختار ایمیل نیست، اما با کمک تابع زیر به سادگی میتوان وجود این کاراکتر را در متن داده شده بررسی کرد.
1def is_valid_email(email):
2 if email.find("@") != -1:
3 return True
4 return False
پاکسازی متن
پاکسازی متن، یکی از رایجترین وظایف در حوزه «پردازش زبان طبیعی» (Natural Language Processing | NLP) است. با استفاده از تابع Find میتوانیم برای شناسایی و جایگزینی زیررشتههای مشخص شده در متن اصلی اقدام کنیم. به عنوان مثال، میتوان کاراکترهای ناخواسته را در متن پیدا و از آن حذف کرد.
برای نمونه، در کد زیر میخواهیم کاراکتر نمادین @ را با چیز دیگری جایگزین کنیم.
1text = "Hello, my email is [email protected]. Contact me!"
2if text.find("@") != -1:
3 text = text.replace("@"," [at] ")
4print(text)
بعد از اجرای کد بالا، متن عبارت داده شده اصلی به شکل زیر تغییر میکند.
Hello, my email is example [at] domain.com. Contact me!
استخراج داده از فایل گزارشات
در هنگام کار کردن با فایل گزارشات، معمولا نیاز داریم که اطلاعات خاصی مانند بازههای زمانی یا پیغامهای خطا را استخراج کرده تا بیشتر بررسی کنیم. برای پیدا کردن و استخراج چنین اطلاعاتی میتوان از متد Find استفاده کرد.
1log = "2023-10-15 08:30:45 - Error: Connection timeout"
2timestamp_start = log.find("20")
3timestamp_end = log.find(" - ")
4error_message = log[timestamp_end:]
5timestamp = log[timestamp_start:timestamp_end]
6print("Timestamp:", timestamp)
7print("Error Message:",error_message)
بعد از اجرای کد بالا، اطلاعات به صورت زیر استخراج و نمایش داده میشوند.
Timestamp: 2023-10-15 08:30:45 Error Message: - Error: Connection timeout
تجزیه داده از درون فایل CSV
در زمان کار کردن با مقادیر داده جدا شده از هم با استفاده از کاما – دادههای درون فایل CSV – میتوانیم با کمک تابع Find به استخراج فیلدهای مشخص شده دادهای بپردازیم.
1csv_row = "John,Doe,30,New York"
2comma1 = csv_row.find(",")
3comma2 = csv_row.find("," , comma1+1)
4name = csv_row[:comma2]
5age = int(csv_row[comma2 +1:csv_row.find(",", comma2+1)])
6print("Name:", name)
7print("Age:", age)
خروجی حاصل از اجرای کد بالا برابر با دادههای زیر است.
Name: John,Doe Age: 30
آموزش حرفه ای پایتون با کمک فرادرس
زبان پایتون به دلیل انعطافپذیری بالا و توانایی حل مسائل مربوط به حوزههای مختلف، در طیف وسیعی از حوزهها استفاده میشود. صرف زمان و تمرکز برای یادگیری مهارت کار با پایتون، تقریبا میتواند موقعیتهای شغلی گوناگونی مانند طراحی سایت، طراحی نرمافزار، بازی سازی، هوش مصنوعی و غیره را در مقابل برنامهنویسان قرار دهد.
البته باید توجه کنیم، در عین حال که پایتون فرایند یادگیری سادهای دارد، در ادامه برای حرفهایتر شدن شامل تکنیکهای بسیار پیشرفته و خاصی نیز میشود. یادگیری این تکنیکها توسط برنامهنویسان در افزایش توانمندی و مهارتها آنها تاثیر بسیار چشمگیری میگذارد.
فیلمهای آموزشی، نه تنها باید به عنوان مطالب کمک درسی برای دانشآموزان و دانشجویان، نکات مفیدی داشته باشند، بلکه حتی افراد کارجو یا برنامه نویسان حرفهای نیز باید بتوانند از محتوای این فیلمها استفاده ببرند. به همین منظور در همه حوزهها از قبیل انواع آموزشهای برنامهنویسی و به طور خاص زبان پایتون، هدف را بر تولید فیلمهای با کیفیت و همه شمول گذاشته است.
در پایین، چند مورد از فیلمهای آموزشی مربوط به پایتون را معرفی کردهایم. این فیلمها پلی بین سطوح مبتدی و حرفهای پایتون با سطوح تخصصی و مربوط به کار بر روی پروژههای واقعی هستند. شاید یادگیری آنها ضروری نباشد اما تسلط به مهارتهای آموزش داده شده در فیلمهای زیر، به وضوح توانایی بیشتر و خاصی را در پیادهسازی پروژهها به برنامهنویسان میدهد.
تفاوت بین متدهای Find و RFind
تابع RFind در پایتون شبیه به تابع Find است، اما این دو تابع، یک تفاوت مهم دارند. آن هم این است که RFind بالاترین ایندکس مربوط به زیررشته داده شده را برمیگرداند یا به عبارتی از سمت راست رشته اصلی به دنبال زیررشته میگردد و سپس اولین ایندکس آن را پیداکرده و برمیگرداند.
تابع Find ایندکس اول یا سمت چپ از اولین رخداد زیررشته را به بیرون برمیگرداند. در واقع مانند تابع Find اولین ایندکس زیررشته را برمیگرداند، اما اولین ایندکس از آخرین رخداد زیررشته را پیدا کرده و برمیگرداند. اگر زیررشته پیدا نشد، هر دو تابع Find و RFind به خروجی مقدار ۱- برمیگردانند.
در کد زیر کدهای مربوط به استفاده از هردو تابع را در کنار یکدیگر نمایش دادهایم. بنابراین، به سادگی میتوانید کاربرد آنها را با هم مقایسه کنید.
1txt = 'Will you text? Or should I text? Is it okay to text?'
2print(len(txt))
3print("The position of 'text' using find():", txt.find('text'))
4print("The position of 'text' using rfind():", txt.rfind('text'))
5
6print("The position of 'i' using find():", txt.find('i'))
7print("The position of 'i' using rfind():", txt.rfind('i'))
خروجی حاصل از اجرای کدهای بالا به صورت زیر خواهد شد.
52 The position of 'text' using find(): 9 The position of 'text' using rfind(): 47 The position of 'i' using find(): 1 The position of 'i' using rfind(): 36
جمع بندی
تابع Find در پایتون، ابزار خودکاری برای پیداکردن موقعیت زیررشتهها درون رشتههای بزرگتر است. این تابع با کمک به برنامهنویسان برای مشخص کردن محدوده مورد جستوجو و شمارش تعداد رخدادهای زیررشته مشخص شده درون رشته اصلی، انعطافپذیری بسیار زیادی را در زمان کدنویسی ارائه میدهد. فرقی نمیکند که در حال تجزیه متن هستید، استخراج داده، یا حتی اجرای وظایف مختلف مربوط به پردازش متن، با کمک تابع Find در پایتون، فرایند حل مسائل به اندازه خوبی ساده میشود.
در این راهنمای جامع از مجله فرادرس، تابع Find را با تمام اصول پایه و اساسی آن پوشش دادیم. مثالهای زیادی را هم برای کمک به درک روش کار این تابع و کاربردها و تواناییهای گوناگون آن پیادهسازی کردیم. از پیدا کردن زیررشتهها تا شمردن تعداد تکرار آنها و سفارشیسازی محدوده جستوجو، همه کارهایی هستند که میتوان با کمک این تابع انجام داد. تابع Find ابزار بسیار با ارزشی است که در زمان نوشتن کدهای پایتون به برنامهنویسان کمک میکند.
source