30-Days-Of-Python/Persain/05_lists.md

25 KiB
Raw Permalink Blame History

۳۰ روز با پایتون: روز پنجم - لیست‌ها

دنبال کردن در توییتر

نویسنده: Asabeneh Yetayeh
ویرایش دوم: ژوئیه ۲۰۲۱

<< روز چهارم | روز ششم >>

30DaysOfPython

روز پنجم

لیست‌ها

چهار نوع داده مجموعه‌ای (collection) در پایتون وجود دارد:

  • لیست (List): مجموعه‌ای است که مرتب و قابل تغییر (modifiable) است. اعضای تکراری را مجاز می‌داند.
  • تاپل (Tuple): مجموعه‌ای است که مرتب و غیرقابل تغییر یا unmodifiable (immutable) است. اعضای تکراری را مجاز می‌داند.
  • مجموعه (Set): مجموعه‌ای است که نامرتب، بدون اندیس و غیرقابل تغییر است، اما می‌توانیم آیتم‌های جدیدی به مجموعه اضافه کنیم. اعضای تکراری مجاز نیستند.
  • دیکشنری (Dictionary): مجموعه‌ای است که نامرتب، قابل تغییر (modifiable) و اندیس‌گذاری شده است. هیچ عضو تکراری ندارد.

لیست مجموعه‌ای از انواع داده‌های مختلف است که مرتب و قابل تغییر (mutable) است. یک لیست می‌تواند خالی باشد یا ممکن است آیتم‌هایی از انواع داده‌های مختلف داشته باشد.

نحوه ایجاد یک لیست

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

  • استفاده از تابع داخلی list
# سینتکس
lst = list()
empty_list = list() # این یک لیست خالی است، هیچ آیتمی در لیست وجود ندارد
print(len(empty_list)) # 0
  • استفاده از براکت، []
# سینتکس
lst = []
empty_list = [] # این یک لیست خالی است، هیچ آیتمی در لیست وجود ندارد
print(len(empty_list)) # 0

لیست‌ها با مقادیر اولیه. ما از _len() برای پیدا کردن طول یک لیست استفاده می‌کنیم.

fruits = ['banana', 'orange', 'mango', 'lemon']                     # لیستی از میوه‌ها
vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot']      # لیستی از سبزیجات
animal_products = ['milk', 'meat', 'butter', 'yoghurt']             # لیستی از محصولات حیوانی
web_techs = ['HTML', 'CSS', 'JS', 'React','Redux', 'Node', 'MongDB'] # لیستی از تکنولوژی‌های وب
countries = ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']

# چاپ لیست‌ها و طول آنها
print('Fruits:', fruits)
print('Number of fruits:', len(fruits))
print('Vegetables:', vegetables)
print('Number of vegetables:', len(vegetables))
print('Animal products:',animal_products)
print('Number of animal products:', len(animal_products))
print('Web technologies:', web_techs)
print('Number of web technologies:', len(web_techs))
print('Countries:', countries)
print('Number of countries:', len(countries))
خروجی
Fruits: ['banana', 'orange', 'mango', 'lemon']
Number of fruits: 4
Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
Number of vegetables: 5
Animal products: ['milk', 'meat', 'butter', 'yoghurt']
Number of animal products: 4
Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB']
Number of web technologies: 7
Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
Number of countries: 5
  • لیست‌ها می‌توانند آیتم‌هایی از انواع داده‌های مختلف داشته باشند
lst = ['Asabeneh', 250, True, {'country':'Finland', 'city':'Helsinki'}] # لیستی شامل انواع داده‌های مختلف

دسترسی به آیتم‌های لیست با استفاده از اندیس‌گذاری مثبت

ما به هر آیتم در یک لیست با استفاده از اندیس آن دسترسی پیدا می‌کنیم. اندیس یک لیست از 0 شروع می‌شود. تصویر زیر به وضوح نشان می‌دهد که اندیس از کجا شروع می‌شود.

fruits = ['banana', 'orange', 'mango', 'lemon']
first_fruit = fruits[0] # ما با استفاده از اندیس به اولین آیتم دسترسی پیدا می‌کنیم
print(first_fruit)      # banana
second_fruit = fruits[1]
print(second_fruit)     # orange
last_fruit = fruits[3]
print(last_fruit) # lemon
# آخرین اندیس
last_index = len(fruits) - 1
last_fruit = fruits[last_index]

دسترسی به آیتم‌های لیست با استفاده از اندیس‌گذاری منفی

اندیس‌گذاری منفی به معنای شروع از انتها است، 1- به آخرین آیتم، 2- به دومین آیتم از آخر اشاره دارد.

fruits = ['banana', 'orange', 'mango', 'lemon']
first_fruit = fruits[-4]
last_fruit = fruits[-1]
second_last = fruits[-2]
print(first_fruit)      # banana
print(last_fruit)       # lemon
print(second_last)      # mango

باز کردن آیتم‌های لیست

lst = ['item1','item2','item3', 'item4', 'item5']
first_item, second_item, third_item, *rest = lst
print(first_item)     # item1
print(second_item)    # item2
print(third_item)     # item3
print(rest)           # ['item4', 'item5']
# مثال اول
fruits = ['banana', 'orange', 'mango', 'lemon','lime','apple']
first_fruit, second_fruit, third_fruit, *rest = fruits 
print(first_fruit)     # banana
print(second_fruit)    # orange
print(third_fruit)     # mango
print(rest)           # ['lemon','lime','apple']
# مثال دوم در مورد باز کردن لیست
first, second, third,*rest, tenth = [1,2,3,4,5,6,7,8,9,10]
print(first)          # 1
print(second)         # 2
print(third)          # 3
print(rest)           # [4,5,6,7,8,9]
print(tenth)          # 10
# مثال سوم در مورد باز کردن لیست
countries = ['Germany', 'France','Belgium','Sweden','Denmark','Finland','Norway','Iceland','Estonia']
gr, fr, bg, sw, *scandic, es = countries
print(gr)
print(fr)
print(bg)
print(sw)
print(scandic)
print(es)

برش زدن آیتم‌ها از یک لیست

  • اندیس‌گذاری مثبت: ما می‌توانیم با مشخص کردن شروع، پایان و گام، محدوده‌ای از اندیس‌های مثبت را مشخص کنیم، مقدار بازگشتی یک لیست جدید خواهد بود. (مقادیر پیش‌فرض برای شروع = 0، پایان = len(lst) - 1 (آخرین آیتم)، گام = 1)
fruits = ['banana', 'orange', 'mango', 'lemon']
all_fruits = fruits[0:4] # این تمام میوه‌ها را برمی‌گرداند
# این نیز نتیجه‌ای مشابه بالایی خواهد داد
all_fruits = fruits[0:] # اگر مشخص نکنیم کجا متوقف شود، بقیه را می‌گیرد
orange_and_mango = fruits[1:3] # این شامل اندیس اول نمی‌شود
orange_mango_lemon = fruits[1:]
orange_and_lemon = fruits[::2] # در اینجا از آرگومان سوم، گام، استفاده کردیم. هر آیتم دومی را می‌گیرد - ['banana', 'mango']
  • اندیس‌گذاری منفی: ما می‌توانیم با مشخص کردن شروع، پایان و گام، محدوده‌ای از اندیس‌های منفی را مشخص کنیم، مقدار بازگشتی یک لیست جدید خواهد بود.
fruits = ['banana', 'orange', 'mango', 'lemon']
all_fruits = fruits[-4:] # این تمام میوه‌ها را برمی‌گرداند
orange_and_mango = fruits[-3:-1] # این شامل آخرین اندیس نمی‌شود، ['orange', 'mango']
orange_mango_lemon = fruits[-3:] # این از -3 تا انتها را می‌دهد، ['orange', 'mango', 'lemon']
reverse_fruits = fruits[::-1] # یک گام منفی لیست را به ترتیب معکوس می‌گیرد، ['lemon', 'mango', 'orange', 'banana']

تغییر دادن لیست‌ها

لیست یک مجموعه مرتب از آیتم‌ها است که قابل تغییر یا modifiable است. بیایید لیست میوه‌ها را تغییر دهیم.

fruits = ['banana', 'orange', 'mango', 'lemon']
fruits[0] = 'avocado'
print(fruits)       #  ['avocado', 'orange', 'mango', 'lemon']
fruits[1] = 'apple'
print(fruits)       #  ['avocado', 'apple', 'mango', 'lemon']
last_index = len(fruits) - 1
fruits[last_index] = 'lime'
print(fruits)        #  ['avocado', 'apple', 'mango', 'lime']

بررسی آیتم‌ها در یک لیست

بررسی اینکه آیا یک آیتم عضو یک لیست است با استفاده از عملگر *in*. مثال زیر را ببینید.

fruits = ['banana', 'orange', 'mango', 'lemon']
does_exist = 'banana' in fruits
print(does_exist)  # True
does_exist = 'lime' in fruits
print(does_exist)  # False

اضافه کردن آیتم‌ها به یک لیست

برای اضافه کردن آیتم به انتهای یک لیست موجود از متد *append()* استفاده می‌کنیم.

# سینتکس
lst = list()
lst.append(item)
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.append('apple')
print(fruits)           # ['banana', 'orange', 'mango', 'lemon', 'apple']
fruits.append('lime')   # ['banana', 'orange', 'mango', 'lemon', 'apple', 'lime']
print(fruits)

درج کردن آیتم‌ها در یک لیست

ما می‌توانیم از متد *insert()* برای درج یک آیتم واحد در یک اندیس مشخص در یک لیست استفاده کنیم. توجه داشته باشید که سایر آیتم‌ها به سمت راست منتقل می‌شوند. متد *insert()* دو آرگومان می‌گیرد: اندیس و یک آیتم برای درج.

# سینتکس
lst = ['item1', 'item2']
lst.insert(index, item)
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.insert(2, 'apple') # درج سیب بین پرتقال و انبه
print(fruits)           # ['banana', 'orange', 'apple', 'mango', 'lemon']
fruits.insert(3, 'lime')   # ['banana', 'orange', 'apple', 'lime', 'mango', 'lemon']
print(fruits)

حذف آیتم‌ها از یک لیست

متد remove یک آیتم مشخص را از یک لیست حذف می‌کند.

# سینتکس
lst = ['item1', 'item2']
lst.remove(item)
fruits = ['banana', 'orange', 'mango', 'lemon', 'banana']
fruits.remove('banana')
print(fruits)  # ['orange', 'mango', 'lemon', 'banana'] - این متد اولین وقوع آیتم را در لیست حذف می‌کند
fruits.remove('lemon')
print(fruits)  # ['orange', 'mango', 'banana']

حذف آیتم‌ها با استفاده از Pop

متد *pop()* اندیس مشخص شده را حذف می‌کند، (یا آخرین آیتم اگر اندیس مشخص نشده باشد):

# سینتکس
lst = ['item1', 'item2']
lst.pop()       # آخرین آیتم
lst.pop(index)
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.pop()
print(fruits)       # ['banana', 'orange', 'mango']

fruits.pop(0)
print(fruits)       # ['orange', 'mango']

حذف آیتم‌ها با استفاده از Del

کلمه کلیدی *del* اندیس مشخص شده را حذف می‌کند و همچنین می‌تواند برای حذف آیتم‌ها در محدوده اندیس استفاده شود. همچنین می‌تواند لیست را به طور کامل حذف کند.

# سینتکس
lst = ['item1', 'item2']
del lst[index] # فقط یک آیتم
del lst        # برای حذف کامل لیست
fruits = ['banana', 'orange', 'mango', 'lemon', 'kiwi', 'lime']
del fruits[0]
print(fruits)       # ['orange', 'mango', 'lemon', 'kiwi', 'lime']
del fruits[1]
print(fruits)       # ['orange', 'lemon', 'kiwi', 'lime']
del fruits[1:3]     # این آیتم‌ها را بین اندیس‌های داده شده حذف می‌کند، بنابراین آیتم با اندیس 3 را حذف نمی‌کند!
print(fruits)       # ['orange', 'lime']
del fruits
print(fruits)       # این باید بدهد: NameError: name 'fruits' is not defined

پاک کردن آیتم‌های لیست

متد *clear()* لیست را خالی می‌کند:

# سینتکس
lst = ['item1', 'item2']
lst.clear()
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.clear()
print(fruits)       # []

کپی کردن یک لیست

امکان کپی کردن یک لیست با تخصیص مجدد آن به یک متغیر جدید به روش زیر وجود دارد: list2 = list1. اکنون، list2 یک مرجع از list1 است، هر تغییری که در list2 ایجاد کنیم، list1 اصلی را نیز تغییر می‌دهد. اما موارد زیادی وجود دارد که ما دوست نداریم نسخه اصلی را تغییر دهیم بلکه دوست داریم یک کپی متفاوت داشته باشیم. یکی از راه‌های جلوگیری از مشکل بالا استفاده از _copy() است.

# سینتکس
lst = ['item1', 'item2']
lst_copy = lst.copy()
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits_copy = fruits.copy()
print(fruits_copy)       # ['banana', 'orange', 'mango', 'lemon']

پیوستن لیست‌ها

چندین راه برای پیوستن، یا الحاق، دو یا چند لیست در پایتون وجود دارد.

  • عملگر پلاس (+)
# سینتکس
list3 = list1 + list2
positive_numbers = [1, 2, 3, 4, 5]
zero = [0]
negative_numbers = [-5,-4,-3,-2,-1]
integers = negative_numbers + zero + positive_numbers
print(integers) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
fruits = ['banana', 'orange', 'mango', 'lemon']
vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
fruits_and_vegetables = fruits + vegetables
print(fruits_and_vegetables ) # ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
  • پیوستن با استفاده از متد extend() متد *extend()* اجازه می‌دهد تا لیستی را به لیستی دیگر اضافه کنید. مثال زیر را ببینید.
# سینتکس
list1 = ['item1', 'item2']
list2 = ['item3', 'item4', 'item5']
list1.extend(list2) # ['item1', 'item2', 'item3', 'item4', 'item5']
num1 = [0, 1, 2, 3]
num2= [4, 5, 6]
num1.extend(num2)
print('Numbers:', num1) # Numbers: [0, 1, 2, 3, 4, 5, 6]
negative_numbers = [-5,-4,-3,-2,-1]
positive_numbers = [1, 2, 3,4,5]
zero = [0]

negative_numbers.extend(zero)
negative_numbers.extend(positive_numbers)
print('Integers:', negative_numbers) # Integers: [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
fruits = ['banana', 'orange', 'mango', 'lemon']
vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
fruits.extend(vegetables)
print('Fruits and vegetables:', fruits ) # Fruits and vegetables: ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']

شمردن آیتم‌ها در یک لیست

متد *count()* تعداد دفعاتی که یک آیتم در یک لیست ظاهر می‌شود را برمی‌گرداند:

# سینتکس
lst = ['item1', 'item2']
lst.count(item)
fruits = ['banana', 'orange', 'mango', 'lemon']
print(fruits.count('orange'))   # 1
ages = [22, 19, 24, 25, 26, 24, 25, 24]
print(ages.count(24))           # 3

یافتن اندیس یک آیتم

متد *index()* اندیس یک آیتم را در لیست برمی‌گرداند:

# سینتکس
lst = ['item1', 'item2']
lst.index(item)
fruits = ['banana', 'orange', 'mango', 'lemon']
print(fruits.index('orange'))   # 1
ages = [22, 19, 24, 25, 26, 24, 25, 24]
print(ages.index(24))           # 2, اولین وقوع

معکوس کردن یک لیست

متد *reverse()* ترتیب یک لیست را معکوس می‌کند.

# سینتکس
lst = ['item1', 'item2']
lst.reverse()
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.reverse()
print(fruits) # ['lemon', 'mango', 'orange', 'banana']
ages = [22, 19, 24, 25, 26, 24, 25, 24]
ages.reverse()
print(ages) # [24, 25, 24, 26, 25, 24, 19, 22]

مرتب‌سازی آیتم‌های لیست

برای مرتب‌سازی لیست‌ها می‌توانیم از متد _sort() یا توابع داخلی _sorted() استفاده کنیم. متد _sort() آیتم‌های لیست را به ترتیب صعودی مرتب می‌کند و لیست اصلی را تغییر می‌دهد. اگر آرگومان reverse متد _sort() برابر با true باشد، لیست را به ترتیب نزولی مرتب می‌کند.

  • sort(): این متد لیست اصلی را تغییر می‌دهد.

    # سینتکس
    lst = ['item1', 'item2']
    lst.sort()                # صعودی
    lst.sort(reverse=True)    # نزولی
    

    مثال:

    fruits = ['banana', 'orange', 'mango', 'lemon']
    fruits.sort()
    print(fruits)             # مرتب شده بر اساس حروف الفبا، ['banana', 'lemon', 'mango', 'orange']
    fruits.sort(reverse=True)
    print(fruits) # ['orange', 'mango', 'lemon', 'banana']
    ages = [22, 19, 24, 25, 26, 24, 25, 24]
    ages.sort()
    print(ages) #  [19, 22, 24, 24, 24, 25, 25, 26]
    
    ages.sort(reverse=True)
    print(ages) #  [26, 25, 25, 24, 24, 24, 22, 19]
    

    sorted(): لیست مرتب شده را بدون تغییر لیست اصلی برمی‌گرداند. مثال:

    fruits = ['banana', 'orange', 'mango', 'lemon']
    print(sorted(fruits))   # ['banana', 'lemon', 'mango', 'orange']
    # ترتیب معکوس
    fruits = ['banana', 'orange', 'mango', 'lemon']
    fruits = sorted(fruits,reverse=True)
    print(fruits)     # ['orange', 'mango', 'lemon', 'banana']
    

🌕 شما سخت‌کوش هستید و تاکنون به دستاوردهای زیادی رسیده‌اید. شما به تازگی چالش‌های روز پنجم را به پایان رسانده‌اید و ۵ قدم در راه رسیدن به بزرگی جلوتر هستید. اکنون برای مغز و عضلات خود تمریناتی انجام دهید.

💻 تمرینات: روز پنجم

تمرینات: سطح ۱

  1. یک لیست خالی تعریف کنید.

  2. یک لیست با بیش از ۵ آیتم تعریف کنید.

  3. طول لیست خود را پیدا کنید.

  4. آیتم اول، آیتم میانی و آیتم آخر لیست را بدست آورید.

  5. لیستی به نام mixed_data_types تعریف کنید، (نام، سن، قد، وضعیت تاهل، آدرس) خود را در آن قرار دهید.

  6. یک متغیر لیستی به نام it_companies تعریف کرده و مقادیر اولیه Facebook، Google، Microsoft، Apple، IBM، Oracle و Amazon را به آن اختصاص دهید.

  7. لیست را با استفاده از _print() چاپ کنید.

  8. تعداد شرکت‌ها را در لیست چاپ کنید.

  9. شرکت اول، میانی و آخر را چاپ کنید.

  10. لیست را پس از تغییر یکی از شرکت‌ها چاپ کنید.

  11. یک شرکت IT به it_companies اضافه کنید.

  12. یک شرکت IT را در وسط لیست شرکت‌ها درج کنید.

  13. نام یکی از it_companies را به حروف بزرگ تغییر دهید (به جز IBM!).

  14. it_companies را با یک رشته '#;&nbsp; ' به هم بپیوندید.

  15. بررسی کنید که آیا شرکت خاصی در لیست it_companies وجود دارد یا خیر.

  16. لیست را با استفاده از متد sort() مرتب کنید.

  17. لیست را با استفاده از متد reverse() به ترتیب نزولی معکوس کنید.

  18. ۳ شرکت اول را از لیست برش دهید.

  19. ۳ شرکت آخر را از لیست برش دهید.

  20. شرکت یا شرکت‌های IT میانی را از لیست برش دهید.

  21. اولین شرکت IT را از لیست حذف کنید.

  22. شرکت یا شرکت‌های IT میانی را از لیست حذف کنید.

  23. آخرین شرکت IT را از لیست حذف کنید.

  24. تمام شرکت‌های IT را از لیست حذف کنید.

  25. لیست شرکت‌های IT را از بین ببرید.

  26. لیست‌های زیر را به هم بپیوندید:

    front_end = ['HTML', 'CSS', 'JS', 'React', 'Redux']
    back_end = ['Node','Express', 'MongoDB']
    
  27. پس از پیوستن لیست‌ها در سوال ۲۶، لیست پیوسته را کپی کرده و به متغیری به نام full_stack اختصاص دهید، سپس Python و SQL را بعد از Redux درج کنید.

تمرینات: سطح ۲

  1. لیست زیر شامل سن ۱۰ دانشجو است:
ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24]
  • لیست را مرتب کرده و حداقل و حداکثر سن را پیدا کنید.
  • حداقل سن و حداکثر سن را دوباره به لیست اضافه کنید.
  • میانه سن را پیدا کنید (یک آیتم میانی یا دو آیتم میانی تقسیم بر دو).
  • میانگین سن را پیدا کنید (مجموع تمام آیتم‌ها تقسیم بر تعداد آنها).
  • دامنه سن‌ها را پیدا کنید (حداکثر منهای حداقل).
  • مقدار (min - average) و (max - average) را مقایسه کنید، از متد _abs() استفاده کنید.
  1. کشور(های) میانی را در لیست کشورها پیدا کنید.
  2. لیست کشورها را به دو لیست مساوی تقسیم کنید اگر زوج است، در غیر این صورت یک کشور بیشتر برای نیمه اول.
  3. ['China', 'Russia', 'USA', 'Finland', 'Sweden', 'Norway', 'Denmark']. سه کشور اول را باز کنید و بقیه را به عنوان کشورهای اسکاندیناوی در نظر بگیرید.

🎉 تبریک می‌گویم! 🎉

<< روز چهارم | روز ششم >>