لیست در پایتون چیست؟ آموزش ساخت و مدیریت List با مثال
لیست در پایتون
جلسه ۱۷ آموزش پایتون: لیستها و مدیریت مجموعهای از دادهها
در جلسه گذشته به آموزش حلقه در پایتون پرداختیم. در ادامه مباحث آموزش پایتون در قسمت 17 لیست در پایتون را فرا می گیریم. با خبرICT همراه باشید.
تحقیق و تدوین مهدی گمرکی
فرض کنید میخواهیم نام ۵ دانشجو را در برنامه خود ذخیره کنیم.
یک راه این است که برای هر دانشجو یک متغیر جداگانه ایجاد کنیم:
student1 = "Ali"
student2 = "Sara"
student3 = "Reza"
student4 = "Mina"
student5 = "Nima"
اما اگر تعداد دانشجوها به ۱۰۰ یا ۱۰۰۰ نفر برسد چه؟
این روش دیگر منطقی نیست.
اینجاست که لیست در پایتون به کمک ما میآید.
به جای ساختن متغیرهای متعدد، میتوانیم چندین مقدار را در یک ساختار واحد ذخیره کنیم:
students = ["Ali", "Sara", "Reza", "Mina", "Nima"]
حالا تمام نامها در یک لیست قرار دارند و میتوانیم بهسادگی آنها را مدیریت کنیم.
لیست در پایتون چیست؟
لیست یا List یکی از پرکاربردترین ساختارهای داده در پایتون است که برای ذخیره چند مقدار در یک متغیر استفاده میشود.
لیستها با استفاده از براکت مربع [] ساخته میشوند:
fruits = ["Apple", "Banana", "Orange"]
در این مثال، سه مقدار داخل لیست fruits قرار گرفتهاند.
لیست میتواند شامل انواع مختلفی از دادهها باشد:
numbers = [10, 20, 30, 40]
names = ["Ali", "Sara", "Reza"]
mixed = ["Python", 10, True, 3.14]
البته در پروژههای واقعی بهتر است تا حد امکان ساختار دادهها منظم و قابل پیشبینی باشد.
دسترسی به اعضای لیست
هر عضو لیست یک موقعیت یا Index دارد.
نکته بسیار مهم:
شمارهگذاری اعضای لیست در پایتون از صفر شروع میشود.
مثلاً:
fruits = ["Apple", "Banana", "Orange"]
اندیسها به این شکل هستند:
Apple → 0
Banana → 1
Orange → 2
برای دسترسی به اولین عضو:
print(fruits[0])
خروجی:
Apple
برای دسترسی به دومین عضو:
print(fruits[1])
خروجی:
Banana
یک اشتباه رایج: فراموش کردن اینکه اندیس از صفر شروع میشود
اگر این لیست را داشته باشیم:
numbers = [10, 20, 30, 40]
اولین عضو numbers[0] است، نه numbers[1].
بنابراین:
print(numbers[0])
خروجی:
10
و:
print(numbers[1])
خروجی:
20
این نکته ساده، یکی از اولین مواردی است که هنگام کار با لیستها باید به آن توجه کنیم.
تغییر مقدار یک عضو لیست
یکی از ویژگیهای مهم لیست این است که میتوانیم مقدار اعضای آن را تغییر دهیم.
مثلاً:
fruits = ["Apple", "Banana", "Orange"]
fruits[1] = "Mango"
print(fruits)
خروجی:
['Apple', 'Mango', 'Orange']
در این مثال، مقدار Banana با Mango جایگزین شده است.
اضافه کردن عضو به لیست با append()
برای اضافه کردن یک عضو جدید به انتهای لیست، میتوانیم از متد append() استفاده کنیم.
fruits = ["Apple", "Banana"]
fruits.append("Orange")
print(fruits)
خروجی:
['Apple', 'Banana', 'Orange']
هر بار که append() را اجرا میکنیم، مقدار جدید به انتهای لیست اضافه میشود.
اضافه کردن چند عضو با extend()
اگر بخواهیم چند مقدار را به لیست اضافه کنیم، extend() کاربرد دارد.
fruits = ["Apple", "Banana"]
fruits.extend(["Orange", "Mango"])
print(fruits)
خروجی:
['Apple', 'Banana', 'Orange', 'Mango']
تفاوت مهم:
append()
یک عضو را به لیست اضافه میکند.
اما:
extend()
اعضای یک مجموعه دیگر را به لیست اضافه میکند.
اضافه کردن عضو در موقعیت مشخص با insert()
گاهی نمیخواهیم مقدار جدید به انتهای لیست اضافه شود.
میتوانیم مشخص کنیم مقدار جدید در چه اندیسی قرار بگیرد.
fruits = ["Apple", "Orange"]
fruits.insert(1, "Banana")
print(fruits)
خروجی:
['Apple', 'Banana', 'Orange']
در اینجا Banana در موقعیت شماره 1 قرار گرفته است.
حذف عضو از لیست با remove()
اگر بخواهیم یک مقدار مشخص را حذف کنیم، میتوانیم از remove() استفاده کنیم:
fruits = ["Apple", "Banana", "Orange"]
fruits.remove("Banana")
print(fruits)
خروجی:
['Apple', 'Orange']
نکته: اگر مقدار موردنظر در لیست وجود نداشته باشد، remove() خطا ایجاد میکند.
حذف عضو با pop()
متد pop() نیز برای حذف عضو استفاده میشود.
اگر بدون مشخص کردن اندیس استفاده شود، آخرین عضو لیست حذف میشود:
fruits = ["Apple", "Banana", "Orange"]
fruits.pop()
print(fruits)
خروجی:
['Apple', 'Banana']
اما میتوانیم اندیس موردنظر را نیز مشخص کنیم:
fruits = ["Apple", "Banana", "Orange"]
fruits.pop(1)
print(fruits)
خروجی:
['Apple', 'Orange']
پیدا کردن تعداد اعضای لیست با len()
برای اینکه بدانیم یک لیست چند عضو دارد، از تابع len() استفاده میکنیم:
fruits = ["Apple", "Banana", "Orange"]
print(len(fruits))
خروجی:
3
این تابع در برنامههایی که با دادههای پویا کار میکنند بسیار کاربردی است.
بررسی وجود یک مقدار در لیست
با استفاده از in میتوانیم بررسی کنیم که آیا یک مقدار در لیست وجود دارد یا خیر.
fruits = ["Apple", "Banana", "Orange"]
print("Banana" in fruits)
خروجی:
True
اما:
print("Mango" in fruits)
خروجی:
False
این قابلیت در جستوجو و اعتبارسنجی دادهها کاربرد زیادی دارد.
پیمایش لیست با حلقه for
در جلسه قبل با حلقه for آشنا شدیم.
حالا میتوانیم این دو مفهوم را با هم ترکیب کنیم:
students = ["Ali", "Sara", "Reza", "Mina"]
for student in students:
print(student)
خروجی:
Ali
Sara
Reza
Mina
این یکی از مهمترین کاربردهای لیست و for در پایتون است.
ترکیب لیست، for و if
قدرت واقعی این ساختار زمانی مشخص میشود که آن را با شرطها ترکیب کنیم.
فرض کنید نمرات چند دانشجو را داریم و میخواهیم فقط نمرات بالاتر از ۱۵ را نمایش دهیم:
scores = [12, 18, 9, 16, 20, 14]
for score in scores:
if score > 15:
print(score)
خروجی:
18
16
20
در اینجا از سه مفهوم مهم استفاده کردیم:
لیست → نگهداری دادهها
for → پیمایش دادهها
if → تصمیمگیری درباره هر داده
این ترکیب، پایه بسیاری از برنامههای کاربردی است.
مرتب کردن لیست با sort()
برای مرتب کردن یک لیست، میتوانیم از sort() استفاده کنیم.
مثلاً:
numbers = [5, 2, 8, 1, 3]
numbers.sort()
print(numbers)
خروجی:
[1, 2, 3, 5, 8]
برای مرتبسازی نزولی میتوانیم از reverse=True استفاده کنیم:
numbers = [5, 2, 8, 1, 3]
numbers.sort(reverse=True)
print(numbers)
خروجی:
[8, 5, 3, 2, 1]
معکوس کردن ترتیب با reverse()
اگر فقط بخواهیم ترتیب فعلی لیست را معکوس کنیم، میتوانیم از reverse() استفاده کنیم:
fruits = ["Apple", "Banana", "Orange"]
fruits.reverse()
print(fruits)
خروجی:
['Orange', 'Banana', 'Apple']
توجه کنید که reverse() با sort(reverse=True) یکسان نیست.
reverse() ترتیب فعلی را برعکس میکند، اما sort(reverse=True) ابتدا دادهها را مرتب کرده و سپس آنها را به شکل نزولی قرار میدهد.
پاک کردن تمام اعضای لیست با clear()
اگر بخواهیم تمام اعضای یک لیست را حذف کنیم:
fruits = ["Apple", "Banana", "Orange"]
fruits.clear()
print(fruits)
خروجی:
[]
لیست همچنان وجود دارد، اما دیگر عضوی داخل آن نیست.
دسترسی به اعضای لیست از انتها
در پایتون میتوانیم از اندیس منفی نیز استفاده کنیم.
مثلاً:
fruits = ["Apple", "Banana", "Orange"]
آخرین عضو:
print(fruits[-1])
خروجی:
Orange
عضو یکی مانده به آخر:
print(fruits[-2])
خروجی:
Banana
این روش هنگام کار با دادههایی که طول آنها مشخص نیست، بسیار مفید است.
برش دادن لیست یا List Slicing
یکی دیگر از قابلیتهای کاربردی پایتون، گرفتن بخشی از یک لیست است.
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])
خروجی:
[20, 30, 40]
در اینجا از اندیس 1 شروع کردهایم و تا قبل از اندیس 4 پیش رفتهایم.
یعنی:
شروع → شامل میشود
پایان → شامل نمیشود
یک مثال کاربردی کامل
فرض کنید قیمت چند محصول را در یک فروشگاه داریم و میخواهیم قیمتهای بیشتر از ۱۰۰ را پیدا کنیم و نمایش دهیم:
prices = [80, 150, 220, 95, 310, 120]
for price in prices:
if price > 100:
print("قیمت:", price)
خروجی:
قیمت: 150
قیمت: 220
قیمت: 310
قیمت: 120
این مثال نشان میدهد مفاهیمی که در جلسات گذشته یاد گرفتهایم چگونه کنار یکدیگر قرار میگیرند.
خطاهای رایج هنگام کار با لیستها
۱. استفاده از اندیس خارج از محدوده
اگر داشته باشیم:
numbers = [10, 20, 30]
این کد خطا ایجاد میکند:
print(numbers[3])
چون آخرین اندیس این لیست 2 است.
۲. اشتباه گرفتن remove و pop
remove() بر اساس مقدار حذف میکند:
numbers.remove(20)
اما pop() بر اساس اندیس حذف میکند:
numbers.pop(1)
۳. اشتباه گرفتن sort و reverse
sort() برای مرتبسازی است.
reverse() برای برعکس کردن ترتیب فعلی است.
شناخت این تفاوتها از خطاهای منطقی در برنامه جلوگیری میکند.
تمرینهای جلسه ۱۷
برای تسلط بیشتر، تمرینهای زیر را انجام دهید.
تمرین ۱
یک لیست شامل نام ۵ شهر ایجاد کنید و با for همه شهرها را چاپ کنید.
تمرین ۲
یک لیست از اعداد ایجاد کنید و فقط اعداد زوج را نمایش دهید.
تمرین ۳
یک عضو جدید به لیست اضافه کنید و سپس لیست را چاپ کنید.
تمرین ۴
بزرگترین و کوچکترین عدد یک لیست را پیدا کنید.
تمرین ۵
برنامهای بنویسید که بررسی کند یک نام مشخص در لیست وجود دارد یا خیر.
تمرین چالشی
لیستی از نمرات دانشجویان ایجاد کنید.
برنامهای بنویسید که:
- تعداد نمرات را نمایش دهد؛
- نمرات بالاتر از ۱۰ را مشخص کند؛
- نمرات کمتر از ۱۰ را مشخص کند؛
- میانگین نمرات را محاسبه کند.
این تمرین، شما را برای ورود به مباحث جدیتر کار با دادهها آماده میکند.
جمعبندی جلسه ۱۷
در این جلسه با لیستها در پایتون آشنا شدیم؛ یکی از مهمترین ساختارهای دادهای که تقریباً در بسیاری از پروژههای پایتونی با آن مواجه خواهیم شد.
یاد گرفتیم چگونه:
- یک لیست ایجاد کنیم؛
- به اعضای آن دسترسی داشته باشیم؛
- مقدار یک عضو را تغییر دهیم؛
- با
append()داده اضافه کنیم؛ - با
extend()چند داده اضافه کنیم؛ - با
insert()داده را در موقعیت مشخص قرار دهیم؛ - با
remove()وpop()داده حذف کنیم؛ - تعداد اعضا را با
len()به دست آوریم؛ - وجود یک مقدار را با
inبررسی کنیم؛ - لیست را مرتب و معکوس کنیم؛
- و با
forوifروی دادههای داخل لیست کار کنیم.
در واقع از این جلسه به بعد، برنامههای ما میتوانند به جای کار با چند متغیر جداگانه، با مجموعهای از دادهها کار کنند.
در جلسه ۱۸ یک قدم مهمتر برمیداریم و با تاپلها (Tuple) در پایتون آشنا میشویم و تفاوت آنها با لیستها را بررسی میکنیم؛ همچنین میبینیم چه زمانی بهتر است از List و چه زمانی از Tuple استفاده کنیم.
تحقیق و تدوین مهدی گمرکی
