نوع داده لیست (list) در پایتون
از لیست ها برای ذخیره چندین داده در یک متغییر استفاده می شود و برای تعداد داده در آن یا به عبارتی طول لیست ها هیچ محدودیتی وجود ندارد. معمولا از لیست برای تولید توالی از عناصر همگن استفاده می شود، لیست ها با قرار دادن داده ها در داخل کروشه [ ] به صورتی که هر داده با کاما ( , ) از هم جدا شده به شکل زیر تعریف می شوند:
شکل کلی تعریف لیست در پایتون
My_list = [value1 , value2 , … ]
برای مثال لیستی از اسامی میوه ها به صورت زیر تعریف می شود :
>>> My_list = ["apple", "banana", "cherry"]
>>> print(My_list)
['apple', 'banana', 'cherry']
فهرست مطالب
لیست ها می توانند از هر نوع داده ای باشند، برای مثال چند نوع داده نمونه به شکل زیر تعریف می شوند:
# list of integer
My_list = [ 1 , 2 , 3 ]
# list of float
My_list = [2.3 , 1.34 , 3.14]
#list of string
My_list = [ 'Ali' , 'Sara' , 'Hooman']
# list of Boolean
my_list = [ True , False , True ]
لیست ها می توانند خالی و بدون مقدار باشند :
My_list = []
لیست ها می توانند ترکیبی از چندین داده باشند :
my_list = [ 10 , ‘Ali’ , 5.7]
داده ها یا عناصر یک لیست می توانند خود یک لیست باشند که به این حالت لیست تو در تو می گویند.
my_list = [ ‘Pronesh’ , [1 , 3 , 5 , 7] , 2 , ['a'] ]
لیست ها می توانند شامل داده ها یا عناصر تکرار باشند:
>>> My_list = [1 , 2 , 3 , 5 , 2 ]
>>> My_list = [ 'apple' , 'banana' , 'charry' , 'apple' , 'banana']
نکته : یک روش دیگر برای تولید لیست ها وجود دارد که آن با استفاده از تبدیل نوع (cast) کردن داده است که البته این روش خیلی مرسوم هم نیست .
>>> My_list = list( ('apple' , 'banana' , 'apple') )
>>> print(My_list)
['apple', 'banana', 'apple']
دسترسی به عناصر لیست
به صورت کلی به دو روش می توان به عناصر یک لیست دسترسی داشت که در تصویر زیر قابل مشاهده است :
همانطور که در تصویر بالا مشاهده می کنید به دو روش می توان به عناصر یک لیست دسترسی داشت:
اولین روش :
اندیس گذاری نرمال که از 0 شروع می شود که اندیس 0 به اولین عنصر لیست اشاره می کند، و این اندیس ها به ترتیب تا آخرین عنصر لیست یک واحد یک واحد به جلو افزایش پیدا می کنند، که در مثال فوق طول لیست ما 7 است پس آخرین عنصر این ایست اندیس 6 را خواهد داشت.
دومین روش :
اندیس گذاری معکوس می باشد، این روش به این شکل عمل می کند که آخرین عنصر لیست با اندیس -1 شماره گذاری شده و هر چه به سمت ابتدای لیست حرکت می کنیم اندیس ها یک واحد یک واحد کوچک می شوند به شکلی که اولین عنصر یک لیست با طول 7 با اندیس -7 شماره گذاری می شود. به مثال های زیر برای درک بهتر دسترسی به عناصر یک لیست توجه کنید :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print(my_list[0])
p
>>> print(my_list[2])
o
>>> print(my_list[6])
h
>>> print(my_list[7])
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range
برای دسترسی یه عناصر لیست های تو در تو می توان با دسترسی تو در تو به شکل زیر عمل کرد:
>>> n_list = ['pronesh' , [1 , 3 , 5 , 7]]
>>> print(n_list[0][1])
r
>>> print(n_list[0])
pronesh
>>> print(n_list[1])
[1, 3, 5, 7]
>>> print(n_list[1][3])
7
نکته: شماره اندیس های یک لیست همیشه یک عدد صحیح می باشد و نمی توان به صورت اعشاری به آن اشاره کرد به عنوان مثال :
>>> print(my_list[4.0])
Traceback (most recent call last):
File "", line 1, in
TypeError: list indices must be integers or slices, not float
حال با یک مثال نحوی دسترسی به عناصر لیست با کمک نمایه گذاری معکوس را بررسی خواهیم کرد :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print(my_list[-1])
h
>>> print(my_list[-7])
P
برش از لیست ها
ما می توانیم بخشی از عناصر لیست را انتخاب و به آن ها دسترسی پیدا کنیم به مثال های زیر توجه کنید :
my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print(my_list[-1])
h
>>> print(my_list[-7])
p
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print(my_list[0:3])
['p', 'r', 'o']
>>> print(my_list[3:])
['n', 'e', 's', 'h']
>>> print(my_list[:])
['p', 'r', 'o', 'n', 'e', 's', 'h']
>>> print(my_list[3:8])
['n', 'e', 's', 'h']
>>> print(my_list[3:-1])
['n', 'e', 's']
>>> print(my_list[-7:])
['p', 'r', 'o', 'n', 'e', 's', 'h']
تغییر عناصر لیست
یکی از قابلیت هایی که لیست ها دارند قابلیت تغییر عناصر لیست پس از تعریف می باشد :
>>> my_list = [ 1 , 2 , 3 , 4 ]
>>> print(my_list)
[1, 2, 3, 4]
>>> my_list[0] = 10
>>> print(my_list)
[10, 2, 3, 4]
>>> my_list[1] = my_list[1] * 10
>>> print(my_list)
[10, 20, 3, 4]
>>> my_list[2:4] = [30 , 40]
>>> my_list
[10, 20, 30, 40]
تابع ( )append
این تابع برای اضافه کردن یک عنصر به لیست کاربرد دارد:
>>> my_list = [ 1 , 2 , 3 , 4 ]
>>> my_list.append(5)
>>> print(my_list)
[1, 2, 3, 4, 5]
تابع ( )extend
این تابع برای اضافه کردن یک لیست به انتهای یک لیست دیگر کاربرد دارد:
my_list = [ 1 , 2 , 3 , 4 ]
>>> my_list.extend([5 , 6 , 7])
>>> print(my_list)
[1, 2, 3, 4, 5, 6, 7]
>>> my_list.extend(['a' , 'b' , 'c'])
>>> print(my_list)
[1, 2, 3, 4, 5, 6, 7, 'a', 'b', 'c']
حذف عناصر لیست
برای حذف کردن کل یا بخشی از عناصر یک لیست از دستور del استفاده می شود :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> del my_list[2]
>>> print(my_list)
['p', 'r', 'n', 'e', 's', 'h']
>>> del my_list[1:5]
>>> print(my_list)
['p', 'h']
>>> del my_list
>>> print(my_list)
Traceback (most recent call last):
File "", line 1, in
NameError: name 'my_list' is not defined
حذف یک عنصر خاص در لیست
برای حذف یک مقدار دلخواه در لیست می توان از دستور ( )remove به شکل زیر استفاده کرد :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> my_list.remove('p')
>>> print(my_list)
['r', 'o', 'n', 'e', 's', 'h']
اگر بخواهیم یک عنصر از لیست را بر اساس شماره ایندکس یا اندیس آن حذف کنیم از تابع ( )pop استفاده می کنیم، به این شکل که شماره اندیس را به عنوان ورودی به تابع pop می دهیم و این تابع آن خانه از لیست را که اندیس به آن اشاره می کند حذف می کند، در صورتی که شماره اندیس را مشخص نکید تابع به صورت پیش فرض آخرین عنصر لیست را حذف می کند که در این شکل می توان یک لیست را به صورت پشته (اولین ورودی، اخرین خروجی FILO) تعریف کرد :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print(my_list.pop(1))
r
>>> print(my_list)
['p', 'o', 'n', 'e', 's', 'h']
>>> print(my_list.pop())
h
>>> print(my_list)
['p', 'o', 'n', 'e', 's']
استفاده از لیست به عنوان پشته (Stack) به شکل زیر می باشد :
>>> stack = [3 , 4 , 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
لیست ها بخاطر سرعت مناسب در pop کردن آخرین عنصر برای پشته (stack) مناسب هستند ولی برای صف (queue) به دلیل نیاز به سرعت مناسب در حذف اولین عنصر مناسب نیستند، زیرا لیست ها برای حذف اولین عنصر نیاز به زمان بیشتری نسبت به حذف اولین عنصر دارند. ولی برای ساخت یک صف (queue) با سرعت مناسب توان با import کردن collections و استفاده از تابع deque یک صف با سرعت بالا رو به شکل زیر تولید کرد.
>>> from collections import deque
>>> queue = deque([1 , 2 , 3])
>>> queue.append(4)
>>> queue.append(5)
>>> queue
deque([1, 2, 3, 4, 5])
>>> queue.popleft()
1
>>> queue.popleft()
2
>>> queue
deque([3, 4, 5])
در صورتی که لازم باشد تمام عناصر یک لیست را به یکباره حذف کنیم و لیست را خالی کنیم می توانیم از تابع ( )clear استفاده کنیم :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> my_list.clear()
>>> print(my_list)
[]
یک روش خلاقانه دیگر برای حذف عناصر لیست ها انتصاب یک لیست خالی به آن بخش از لیست که قصد حذف آن را دارید می باشد :
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> my_list[2:3] = []
>>> print(my_list)
['p', 'r', 'n', 'e', 's', 'h']
>>> my_list[2:5] = []
>>> print(my_list)
['p', 'r', 'h']
>>> my_list = []
>>> print(my_list)
[]
برخی متد های پر کاربرد برای لیست ها
به مثال هایی از نحوه استفاده از این متد ها توجه فرمایید:
>>> my_list = [1 , 8 , 3 , 8 , 5 , 2 , 8 ]
>>> my_list.append('a')
>>> print(my_list)
[1, 8, 3, 8, 5, 2, 8, 'a']
>>> my_list.index(8)
1
>>> my_list.index(8 , 2)
3
>>> print(my_list.count(8))
3
>>> my_list.pop()
'a'
>>> my_list.sort()
>>> my_list
[1, 2, 3, 5, 8, 8, 8]
>>> my_list.reverse()
>>> my_list
[8, 8, 8, 5, 3, 2, 1]
حال به چند مثال جذاب برای تولید لیست خواهیم پرداخت، برای اولین مثال می خواهیم یک لیست از توالی 10 تایی از توان های 2 عدد دو را تولید کنیم :
>>> pow2 = [2 ** x for x in range(10)]
>>> print(pow2)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
کد بالا معادل با کد زیر می باشد :
>>> pow2 = []
>>> for x in range(10): pow2.append(2 ** x)
>>> print(pow2)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
مثال دیگر از کاربرد های لیست استفاده از if و for در تعریف یک لیست می باشد، به مثال زیر توجه فرماید:
>>> pow2 = [2 ** x for x in range(10) if x > 5]
>>> pow2
[64, 128, 256, 512]
>>> odd = [x for x in range(20) if x % 2 == 1]
>>> odd
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> [x+y for x in ['Python ','C '] for y in 'Language','Programming']]
['Python Language', 'Python Programming', 'C Language', 'C Programming']
برای بررسی وجود یا عدم وجود یک عنصر در بین عناصر یک لیست می توان از in به شکل مثال زیر استفاده کرد:
>>> my_list = ['p' , 'r' , 'o' , 'n' , 'e' , 's' , 'h']
>>> print('p' in my_list)
True
>>> print('a' in my_list)
False
>>> print('c' not in my_list)
True
از لیست ها همچنین می توان در حلقه های تکرار به عنوان شمارنده استفاده کرد به مثال زیر در این باره توجه فرمایید :
>>> for fruit in ['apple','banana','mango']:
print("I like",fruit)
I like apple
I like banana
I like mango
با نکات بیان شده و مثال های استفاده شده در این مقاله سعی داشتم تا شما عزیزان را با نوع داده لیست بیشتر آشنا کنم، و امیدوارم مفید بوده باشه. در مقالات بعدی به بررسی انواع داده دیگر در پایتون می پردازم.
دیدگاهتان را بنویسید