با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش پایتون ، را دنبال می کنند. در قسمت قبلی به آموزش Lambda در پایتون پرداختیم ، در این جلسه قصد داریم به آموزش آرایه ها در پایتون Python و همچنین توابع کار با آرایه در پایتون بپردازیم.
نکته: پایتون به صورت پیش فرض کانتینر ای (Container) به نام آرایه ندارد. اما در کتابخانه NumPy یک کانتینر به نام Array وجود دارد که امکانات زیادی را ارائه می دهد. در این آموزش ما از لیست ها به عنوان آرایه استفاده می کنیم.
آرایه ها (Array) در واقع متغیر های خاصی هستند که می تونند چندین داده را در خود ذخیره کنند. به چنین نوع ساختار های داده ای که مجموعه ای از داده ها را در خود ذخیره می کنند (مانند لیست، دیکشنری و …) کانتینر (Container) یا “ظرف” گفته می شود.
کد زیر ساخت آرایه در پایتون را نشان می دهد:
1 | cars = ["Ford", "Volvo", "BMW"] |
اگر شما لیستی از آیتم هایی داشته باشید و بخواهید آن ها را در متغیر های جداگانه ذخیره کنید،(مثل نام اتومبیل ها) نتیجه کار شبیه کد زیر خواهد بود:
1 2 3 | $cars1 = "Volvo"; $cars2 = "BMW"; $cars3 = "Toyota"; |
حال اگر بخواهید دنبال یک اتومبیل خاص بگردید چه کار خواهید کرد؟ و اگر تعداد اتومبیل ها ۳۰۰ دستگاه بود چه؟
پاسخ سوال استفاده از آرایه است.
یک آرایه بسیاری از مقادیر را تحت یک نام ذخیره می کند و برای دسترسی به اعضای آرایه کافیست از اندیس آرایه استفاده کنیم.
برای دسترسی به آرایه ها از نام آرایه و اندیس عنصر استفاده می کنیم:
1 | x = cars[0] |
کد بالا اولین عنصر آرایه cars را در متغیر x میریزد.
همچنین با این روش می توانیم مقادیر عناصر را نیز تغییر دهیم:
1 | cars[0] = "Toyota" |
از تابع ()len برای بدست آوردن طول یک آرایه استفاده می کنیم:
1 | x = len(cars) |
از حلقه for می توانیم برای عناصر آرایه استفاده کنیم:
1 2 | for x in cars: print(x) |
از تابع ()append برای اضافه کردن یک عنصر به انتهای آرایه استفاده می کنیم.
در مثال زیر مقدار “Honda” را به آرایه cars اضافه کرده ایم:
1 | cars.append("Honda") |
از تابع ()pop برای حذف یک مقدار مشخص استفاده می کنیم.
در مثال زیر عنصر دوم آرایه را حذف کرده ایم:
1 | cars.pop(1) |
همچنین می توانید از تابع ()remove برای حذف یک عنصر استفاده کنید.
در مثال زیر عنصر با مقدار “Volvo” را از آرایه حذف کرده ایم:
1 | cars.remove("Volvo") |
در پایتون توابع از پیش تعریف شده ای برای کار با آرایه وجود دارد.
توضیحات | متد |
یک عنصر به انتهاب لیست اضافه می کند | ()append |
تمام عناصر را از لیست حذف می کند | ()clear |
یک کپی از لیست را بر می گرداند | ()copy |
تعداد یک عنصر مشخص شده در لیست را بر می گرداند (دفعات تکرار) | ()count |
عنصر های یک لیست دیگر را به لیست جاری اضافه می کند | ()extend |
اندیس یک عنصر مشخص شده را بر می گرداند | ()index |
یک عنصر را در موقعیت مشخص شده اضافه می کند | ()insert |
یک عنصر را در موقعیت مشخص شده حذف می کند | ()pop |
یک عنصر را با مقدار مشخص شده حذف می کند | ()remove |
مرتب سازی و جایگاه عناصر لیست را معکوس می کند | ()reverse |
لیست را مرتب می کند | ()sort |
جلسه آموزش آرایه ها در پایتون python و توابع کار با آرایه در پایتون نیز به پایان رسید.
در جلسه بعد به آموزش lambda در پایتون python خواهیم پرداخت. با ما همراه باشید.
Pari
سلام. ببخشید چطوری در یک ارایه مقادیر غیر تکراری را بر گرادنیم مثلا در [۱و۲و۲و۳و۴و۴] رو به [۱و۲و۳و۴] تبدیل کنیم؟
صادق
سلام. می تونید از یک آرایه یا لیست کمکی دیگه استفاده کنید. ابتدا با حلقه for آرایه اصلی رو پیمایش کنید و برای هر عدد چک کنید که در آرایه کمکی وجود داره یا نه. اگه وجود نداشت، اون رو به آرایه کمکی اضافه کنید و اگه وجود داشت که هیچی.
my_fisrt_list = [1,2,2,3,3,3,4,4]
my_second_list = []
for x in my_first_list:
if x not in my_second_list:
my_second_list.append(x)
Hamid
سلام خسته نباشید. من یه مشکلی دارم. یه فایلtxt دارم که به این صورت هستش:
۰:۱۲
۱:۲۲
۲:۱۴
۳:۵۶
من فقط میخوام مقدار هر اندیس را در یک آرایه ذخیره کنم نه خود شماره اندیس و : بلکه به این صورت [۱۲,۲۲,۱۴,۵۶]
چطوری میتونم از فایل خونده و در یک ارایه قرار بدم؟
مریم
سلام من یه پروژه دارم که باید از متلب به پایتون کانورت کنم تو متلب توان ارایه ای دارم معادلش تو پایتون چیه
صادق
سلام. لطفا کدتون رو ارسال کنید تا بررسی بشه
الهام
سلام چطوری میشه در عدد پی مشخص کرد تاریخ تولد از کجا شروع و کجا تموم میشه؟ میشه کدشو راهنمایی کنید؟
elham.joodaki11
سلام من یه تمرین دارم که باید از عدد پی تاریه تولدمو پیدا کنم و بعد بیام توی همین برنامه وقتی تاریخ تولدمو پیدا کردم باید گزارش کنه که تاریخ تولد من از کجا شروع میشه و کجا تموم میشه
من تا اینجا که باید تاریخ تولدمو پیدا کنه رو کدشو نشوتم
ولی بعد اون رو نمیدونم از چی استفاده کنم
کدش رو براتون ارسال میکنم
address=”F:/file/million_digit.txt”
with open (address) as file_object:
lines=file_object.readlines()
full_pi=””
for line in lines:
full_pi+=line.strip()
print(full_pi[:80])
print(len(full_pi))
birthday = input(“enter your birthday, in the form ddmmyy:” )
if birthday in full_pi:
print(“you are in the number pi!”)
else:
print(“you are not in the number pi!”)
صادق
سلام. ابتدا کد خودتون رو بررسی می کنم بعد میریم سراغ ادامش. به نظر میرسه کد شما می تونه تاریخ رو توی ارقام عدد پی پیدا کنه اما در خطوط آخر شما یه شرط if دارید که به ازای هر خط یا لاین، داره چاپ می کنه که تاریخ پیدا شده یا نه. به نظرم باید اینطور می بود که اگه هر جایی تاریخ رو پیدا کرد، چاپ کنه پیدا شد و اگر کل فایل رو جستجو کرد و چیزی پیدا نشد، اون موقع چاپ کنه تاریخ پیدا نشد. یعنی در هر صورت شما فقط یکبار به کاربر پیام می دید که تاریخ پیدا شده یا نه. اما کدی که شما نوشتی به ازای هر لاین داره این کار رو انجام میده به علاوه اینکه حتی اگر به جواب برسیم، جستجو رو ادامه میده در حالی که باید برنامه متوقف بشه چون به جواب رسیدیم. مورد بعدی اینکه شما در هربار تکرار حلقه for دارید تاریخ تولد رو از کاربر دریافت می کنید که باید در ابتدای کد اینکار انجام بشه.
صادق
اما برای پیدا کردن موقعیت (اندیس شروع و پایان) تاریخ تولد:
اگه فایل شما تعداد حروف هر خط یکسان باشه کار راحته. فرض کنیم در هر خط یا لاین ۸۰ کاراکتر وجود داره. ما باید یه متغیر شمارنده یا counter با مقدار اولیه ۰ تعریف کنیم و در انتهای حلقه for هر بار مقدار اون رو یک واحد افزایش بدیم. برای پیدا کردن موقعیت یا اندیس شروع یک کاراکتر یا رشته در داخل رشته ای دیگر، از تابع ()index استفاده می کنیم. برای مثال برای پیدا کردن موقعیت شروع رشته ۷۶۰۹۲۸ (تاریخ تولد) در رشته full_pi به این صورت عمل می کنیم: full_pi.index(“760928”) حالا برای پیدا کردن موقعیت تاریخ تولد در کل فایل، باید مقدار شمارنده رو در تعداد حروف هر خط (در اینجا ۸۰) ضرب کرده و با خروجی دستور قبل جمع کنیم. به این صورت: (counter * 80) + full_pi.index(“760928”)
این میشه موقعیت تاریخ تولد پیدا شده ما در کل فایل. بدیهی است که همه این محاسبات باید در داخل بدنه شرط if آن هم موقعی که تاریخ تولد پیدا شده، انجام بشه.
در ضمن از تابع ()strip هم استفاده نکنید و از همون line به جای full_pi استفاده کنید.