حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

جست‌وجوی خطی پایتون؛ پیدا کردن اولین شاخص

جست‌وجوی خطی و دودویی در پایتون؛ قرارداد و مرزها · 0٪

✍️ جست‌وجوی خطی از ابتدای فهرست جلو می‌رود و هر عضو را با هدف مقایسه می‌کند. لازم نیست ورودی مرتب باشد. اگر قرارمان «اولین شاخص» باشد، باید به محض رسیدن به اولین برابر، جواب را برگردونیم. ادامه دادن تا آخر و عوض کردن جواب ممکن است آخرین رخداد را تحویل بدهد؛ این یک قرارداد دیگر است.

def find_first(values, target):
    for index, value in enumerate(values):
        if value == target:
            return index
    return -1

print(find_first([7, 2, 7], 7))  # 0

enumerate هم شماره خانه را می‌دهد و هم مقدار را. وقتی هدف پیدا نشود، حلقه تمام می‌شود و -1 برمی‌گردد. این مقدار علامت قراردادی «پیدا نشد» است؛ نباید آن را بی‌بررسی برای دسترسی به فهرست استفاده کنی، چون در پایتون شاخص منفی به انتهای فهرست اشاره می‌کند.

برای ورودی خالی، اولین خط بعد از حلقه اجرا می‌شود و جواب همان -1 است. در بدترین حالت همه اعضا بررسی می‌شوند، پس هزینه خطی است. اشتباه رایج دیگر، برگرداندن خود مقدار به‌جای شماره خانه است؛ مثلاً صفر بودن جواب لزوماً به معنی صفر بودن عضو نیست.

فعالیت شما

قرارداد find_first را بخوان: فهرست عددی نامرتب و target می‌گیرد، اولین شاخص هدف یا -1 را برمی‌گرداند؛ خالی و نبود هدف هر دو -1 هستند. این گام خواندنی است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید: