لیستهای پایتون (Python Lists) همانند آرایههایی با اندازه پویا هستند که در زبانهای دیگر اعلام میشوند (مانند بردار در ++C و ArrayList در جاوا). به زبان ساده، یک لیست یک مجموعه از اشیاء است که در داخل [ ] قرار دارد و با ویرگول از یکدیگر جدا شدهاند.
لیست یک نوع داده توالی است که برای ذخیره مجموعهای از دادهها استفاده میشود. تاپل و رشته نیز دیگر انواع دادههای توالی هستند.
مثالی از لیست در پایتون
در اینجا یک مثال از لیست در پایتون آورده شده است که از [ ] برای ایجاد لیست استفاده میشود.
Var = ["datayad", "for", "you"] print(Var)
خروجی:
["datayad", "for", "you"]
لیستها ابتداییترین کانتینرها (دربرگیرندهها) هستند که جزء جداییناپذیری از زبان پایتون محسوب میشوند. لیستها همیشه نیازی به یکنواختی ندارند که این امر آنها را به قدرتمندترین ابزار در پایتون تبدیل کرده است.
یعنی یک لیست میتواند همزمان شامل انواع داده مانند اعداد صحیح، رشتهها و حتی اشیاء باشد. لیستها قابل تغییر (mutable) هستند، بنابراین میتوان حتی پس از ایجادشان آنها را تغییر داد.
ایجاد یک لیست در پایتون
لیستها در پایتون میتوانند با قرار دادن دنباله مورد نظر داخل پرانتز مربعی [] ایجاد شوند. برخلاف مجموعهها، برای ایجاد یک لیست نیازی به استفاده از یک تابع داخلی پایتونی نیست.
توجه: برخلاف مجموعهها، لیست ممکن است شامل عناصر قابل تغییر باشد.
مثال 1: ساخت یک لیست در پایتون
# Python program to demonstrate # Creation of List # Creating a List List = [] print("Blank List: ") print(List) # Creating a List of numbers List = [10, 20, 14] print("\nList of numbers: ") print(List) # Creating a List of strings and accessing # using index List = ["datayad", "For", "you"] print("\nList Items: ") print(List[0]) print(List[2])
خروجی:
Blank List: [] List of numbers: [10, 20, 14] List Items: datayad you
پیچیدگیها برای ایجاد لیستها
- پیچیدگی زمانی: O(1)
- پیچیدگی فضایی: O(n)
مثال 2: ایجاد یک لیست با عناصر متفاوت یا تکراری
یک لیست میتواند شامل مقادیر تکراری با جایگاههای متمایز باشد و به همین دلیل، مقادیر متفاوت یا تکراری میتوانند به عنوان یک دنباله در زمان ایجاد لیست در لیست ذخیره شوند.
# Creating a List with # the use of Numbers # (Having duplicate values) List = [1, 2, 4, 4, 3, 3, 3, 6, 5] print("\nList with the use of Numbers: ") print(List) # Creating a List with # mixed type of values # (Having numbers and strings) List = [1, 2, 'datayad', 4, 'For', 6, 'you'] print("\nList with the use of Mixed Values: ") print(List)
خروجی:
List with the use of Numbers: [1, 2, 4, 4, 3, 3, 3, 6, 5] List with the use of Mixed Values: [1, 2, 'datayad', 4, 'For', 6, 'you']
دسترسی به عناصر لیست
برای دسترسی به عناصر لیست، به شماره شاخص (index) مراجعه کنید. از اپراتور شاخص [ ] برای دسترسی به یک مورد در یک لیست استفاده کنید. شاخص باید یک عدد صحیح باشد. برای دسترسی به عناصر لیستهای تو در تو از شاخصگذاری تو در تو استفاده میشود.
مثال 1: دسترسی به عناصر لیست
# Python program to demonstrate # accessing of element from list # Creating a List with # the use of multiple values List = ["datayad", "For", "you"] # accessing a element from the # list using index number print("Accessing a element from the list") print(List[0]) print(List[2])
خروجی:
Accessing a element from the list datayad you
مثال 2: دسترسی به عناصر در یک لیست چندبعدی (تو در تو)
# Creating a Multi-Dimensional List # (By Nesting a list inside a List) List = [['datayad', 'For'], ['you']] # accessing an element from the # Multi-Dimensional List using # index number print("Accessing a element from a Multi-Dimensional list") print(List[0][1]) print(List[1][0])
خروجی:
Accessing a element from a Multi-Dimensional list For you
شاخصگذاری منفی
در پایتون، شاخصهای (index) منفی موقعیت عناصر را از انتهای لیست به ما میدهند. یعنی به جای اینکه بخواهید آفست را محاسبه کنید، مانند `List[len(List)-3]`، کافی است فقط `List[-3]` را بنویسید.
شاخصگذاری منفی به معنای شروع از انتهاست، -1 به آخرین مورد ارجاع دارد، -2 به مورد دوم از انتها، و الی آخر.
List = [1, 2, 'datayad', 4, 'For', 6, 'you'] # accessing an element using # negative indexing print("Accessing element using negative indexing") # print the last element of list print(List[-1]) # print the third last element of list print(List[-3])
خروجی:
Accessing element using negative indexing you For
پیچیدگیها برای دسترسی به عناصر در لیستها:
- پیچیدگی زمانی: O(1)
- پیچیدگی فضایی: O(1)
دریافت اندازه لیست پایتون
تابع ()len در پایتون برای دریافت طول لیست استفاده میشود.
# Creating a List List1 = [] print(len(List1)) # Creating a List of numbers List2 = [10, 20, 14] print(len(List2))
خروجی:
0 3
گرفتن یک لیست به عنوان ورودی در پایتون
ما میتوانیم یک لیست از عناصر را به عنوان رشته، عدد صحیح، عدد اعشاری و غیره در ورودی دریافت کنیم. اما نوع پیشفرض آن یک رشته است.
مثال 1:
# Python program to take space # separated input as a string # split and store it to a list # and print the string list # input the list as string string = input("Enter elements (Space-Separated): ") # split the strings and store it to a list lst = string.split() print('The list is:', lst) # printing the list
خروجی:
Enter elements: DATAYAD FOR YOU The list is: ['DATAYAD', 'FOR', 'YOU']
مثال 2:
# input size of the list n = int(input("Enter the size of list : ")) # store integers in a list using map, # split and strip functions lst = list(map(int, input("Enter the integer\ elements:").strip().split()))[:n] # printing the list print('The list is:', lst)
خروجی:
Enter the size of list : 4 Enter the integer elements: 6 3 9 10 The list is: [6, 3, 9, 10]
افزودن عناصر به یک لیست پایتون
روش 1: استفاده از متد ()append
عناصر میتوانند با استفاده از تابع داخلی ()append به لیست افزوده شوند. فقط یک عنصر در هر زمان با استفاده از متد append به لیست اضافه میشود، برای اضافه کردن چندین عنصر با استفاده از متد append از حلقهها استفاده میشود.
تاپلها غیرقابل تغییر هستند، پس میتوانند با استفاده از متد append به لیست اضافه شوند. بر خلاف مجموعهها، لیستها همچنین میتوانند به لیست موجود با استفاده از متد append اضافه شوند.
# Python program to demonstrate # Addition of elements in a List # Creating a List List = [] print("Initial blank List: ") print(List) # Addition of Elements # in the List List.append(1) List.append(2) List.append(4) print("\nList after Addition of Three elements: ") print(List) # Adding elements to the List # using Iterator for i in range(1, 4): List.append(i) print("\nList after Addition of elements from 1-3: ") print(List) # Adding Tuples to the List List.append((5, 6)) print("\nList after Addition of a Tuple: ") print(List) # Addition of List to a List List2 = ['For', 'you'] List.append(List2) print("\nList after Addition of a List: ") print(List)
خروجی:
Initial blank List: [] List after Addition of Three elements: [1, 2, 4] List after Addition of elements from 1-3: [1, 2, 4, 1, 2, 3] List after Addition of a Tuple: [1, 2, 4, 1, 2, 3, (5, 6)] List after Addition of a List: [1, 2, 4, 1, 2, 3, (5, 6), ['For', 'you']]
پیچیدگیها برای اضافه کردن عناصر به لیست (با استفاده از متد append):
- پیچیدگی زمانی: O(1)
- پیچیدگی فضایی: O(1)
روش 2: استفاده از متد ()insert
متد append تنها برای اضافه کردن عناصر به انتهای لیست کار میکند. برای اضافه کردن عناصر به لیست ها در موقعیت مورد نظر، از متد ()insert استفاده میشود.
برخلاف append که تنها یک آرگومان میپذیرد، متد insert نیاز به دو آرگومان دارد (موقعیت، مقدار).
# Python program to demonstrate # Addition of elements in a List # Creating a List List = [1,2,3,4] print("Initial List: ") print(List) # Addition of Element at # specific Position # (using Insert Method) List.insert(3, 12) List.insert(0, 'datayad') print("\nList after performing Insert Operation: ") print(List)
خروجی:
Initial List: [1, 2, 3, 4] List after performing Insert Operation: ['datayad', 1, 2, 3, 12, 4]
پیچیدگیها برای اضافه کردن عناصر به لیست (با استفاده از متد insert()):
- پیچیدگی زمانی: O(n)
- پیچیدگی فضایی: O(1)
روش 3: استفاده از متد ()extend
علاوه بر متدهای append و insert، یک متد دیگر برای افزودن عناصر وجود دارد به نام extend. این متد برای اضافه کردن چندین عنصر به لیست در یک زمان به انتهای لیست استفاده میشود.
توجه: متدهای append و extend تنها میتوانند عناصر را به انتهای لیست اضافه کنند.
# Python program to demonstrate # Addition of elements in a List # Creating a List List = [1, 2, 3, 4] print("Initial List: ") print(List) # Addition of multiple elements # to the List at the end # (using Extend Method) List.extend([8, 'datayad', 'Always']) print("\nList after performing Extend Operation: ") print(List)
خروجی:
Initial List: [1, 2, 3, 4] List after performing Extend Operation: [1, 2, 3, 4, 8, 'datayad', 'Always']
پیچیدگیها برای اضافه کردن عناصر به لیست (با استفاده از متد extend()):
- پیچیدگی زمانی: O(n)
- پیچیدگی فضایی: O(1)
برعکس کردن یک لیست
روش 1: استفاده از متد ()reverse
یک لیست میتواند با استفاده از متد ()reverse در پایتون برعکس شود.
# Reversing a list mylist = [1, 2, 3, 4, 5, 'datayad', 'Python'] mylist.reverse() print(mylist)
خروجی:
['Python', 'datayad', 5, 4, 3, 2, 1]
روش 2: استفاده از تابع ()reversed
تابع ()reversed یک تکرارکننده معکوس (reverse iterator) را برمیگرداند که میتوان آن را با استفاده از تابع ()list به یک لیست تبدیل کرد.
my_list = [1, 2, 3, 4, 5] reversed_list = list(reversed(my_list)) print(reversed_list)
خروجی:
[5, 4, 3, 2, 1]
حذف عناصر از لیست
روش 1: استفاده از متد ()remove
عناصر میتوانند با استفاده از تابع داخلی ()remove از لیست حذف شوند، اما در صورتی که عنصر در لیست وجود نداشته باشد، یک خطا ایجاد میشود.
متد ()remove تنها یک عنصر را در هر زمان حذف میکند. برای حذف یک مجموعه از عناصر، از تکرارکننده استفاده میشود. متد ()remove عنصر مشخص شده را حذف میکند.
توجه: متد remove در لیست تنها اولین وقوع عنصر جستجو شده را حذف خواهد کرد.
مثال1:
# Python program to demonstrate # Removal of elements in a List # Creating a List List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] print("Initial List: ") print(List) # Removing elements from List # using Remove() method List.remove(5) List.remove(6) print("\nList after Removal of two elements: ") print(List)
خروجی:
Initial List: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] List after Removal of two elements: [1, 2, 3, 4, 7, 8, 9, 10, 11, 12]
مثال2:
# Creating a List List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] # Removing elements from List # using iterator method for i in range(1, 5): List.remove(i) print("\nList after Removing a range of elements: ") print(List)
خروجی:
List after Removing a range of elements: [5, 6, 7, 8, 9, 10, 11, 12]
پیچیدگیها برای حذف عناصر از لیست (با استفاده از متد remove):
- – پیچیدگی زمانی: O(n)
- – پیچیدگی فضایی: O(1)
روش 2: استفاده از متد ()pop
تابع ()pop برای حذف و بازگرداندن یک عنصر از لیست استفاده میشود، اما به طور پیشفرض تنها آخرین عنصر لیست را حذف میکند.
برای حذف یک عنصر از یک موقعیت خاص لیست، شاخص عنصر به عنوان آرگومان به متد ()pop داده میشود.
List = [1, 2, 3, 4, 5] # Removing element from the # Set using the pop() method List.pop() print("\nList after popping an element: ") print(List) # Removing element at a # specific location from the # Set using the pop() method List.pop(2) print("\nList after popping a specific element: ") print(List)
خروجی:
List after popping an element: [1, 2, 3, 4] List after popping a specific element: [1, 2, 4]
پیچیدگیها برای حذف عناصر از لیست (با استفاده از متد pop):
- پیچیدگی زمانی: O(1)/O(n)
(O(1) برای حذف آخرین عنصر، O(n) برای حذف اولین و عناصر وسطی)
- پیچیدگی فضایی: O(1)
برش لیست
میتوانیم زیررشتهها و زیرلیستها را با استفاده از برش به دست آوریم. در لیست پایتون، چندین روش برای چاپ کل لیست با تمام عناصر وجود دارد، اما برای چاپ یک محدوده خاص از عناصر لیست، از عملگر برش استفاده میشود.
عملیات برش بر روی لیستها با استفاده از دو نقطه “:” انجام میشود.
برای چاپ عناصر از ابتدا تا یک محدوده از:
[: index]
برای چاپ عناصر از انتها:
[:-index]
برای چاپ عناصر از یک ایندکس خاص به بعد و تا انتها:
[index:]
برای چاپ کل لیست به ترتیب معکوس:
[::-1]
توجه – برای چاپ عناصر لیست از انتها، از ایندکسهای منفی استفاده کنید.
درک برش لیستها با چند مثال:
`pr[0]` به عنصر اول، دسترسی مییابد.
`pr[-4]` به عنصر چهارم از انتها، دسترسی مییابد.
`pr[2:]` یک لیست از عناصر از سومین عنصر تا عنصر آخر را میسازد.
`pr[:4]` یک لیست از عناصر از ابتدا تا چهارمین عنصر را میسازد.
`pr[2:4]` یک لیست از عناصر از سومین تا پنجمین عنصر را میسازد.
`pr[1::2]` عناصر جایگاه فرد، شروع از عنصر دوم را میسازد.
مثال:
# Python program to demonstrate # Removal of elements in a List # Creating a List List = ['D', 'A', 'T', 'A', 'Y', 'A','D', 'F', 'O', 'R', 'Y', 'O', 'U'] print("Initial List: ") print(List) # Print elements of a range # using Slice operation Sliced_List = List[3:8] print("\nSlicing elements in a range 3-8: ") print(Sliced_List) # Print elements from a # pre-defined point to end Sliced_List = List[5:] print("\nElements sliced from 5th " "element till the end: ") print(Sliced_List) # Printing elements from # beginning till end Sliced_List = List[:] print("\nPrinting all elements using slice operation: ") print(Sliced_List)
خروجی:
Initial List: ['D', 'A', 'T', 'A', 'Y', 'A', 'D', 'F', 'O', 'R', 'Y', 'O', 'U'] Slicing elements in a range 3-8: ['A', 'Y', 'A', 'D', 'F'] Elements sliced from 5th element till the end: ['A', 'D', 'F', 'O', 'R', 'Y', 'O', 'U'] Printing all elements using slice operation: ['D', 'A', 'T', 'A', 'Y', 'A', 'D', 'F', 'O', 'R', 'Y', 'O', 'U']
برش لیست با استفاده از شاخص منفی
# Creating a List List = ['D', 'A', 'T', 'A', 'Y', 'A','D', 'F', 'O', 'R', 'Y', 'O', 'U'] print("Initial List: ") print(List) # Print elements from beginning # to a pre-defined point using Slice Sliced_List = List[:-6] print("\nElements sliced till 6th element from last: ") print(Sliced_List) # Print elements of a range # using negative index List slicing Sliced_List = List[-6:-1] print("\nElements sliced from index -6 to -1") print(Sliced_List) # Printing elements in reverse # using Slice operation Sliced_List = List[::-1] print("\nPrinting List in reverse: ") print(Sliced_List)
خروجی:
Initial List: ['D', 'A', 'T', 'A', 'Y', 'A', 'D', 'F', 'O', 'R', 'Y', 'O', 'U'] Elements sliced till 6th element from last: ['D', 'A', 'T', 'A', 'Y', 'A', 'D'] Elements sliced from index -6 to -1 ['F', 'O', 'R', 'Y', 'O'] Printing List in reverse: ['U', 'O', 'Y', 'R', 'O', 'F', 'D', 'A', 'Y', 'A', 'T', 'A', 'D']
خلاصه لیست (List Comprehension)
خلاصه لیست در پایتون برای ایجاد لیستهای جدید از دیگر iterable ها مانند تاپلها، رشتهها، آرایهها، لیستها و غیره استفاده میشود.
یک خلاصه لیست شامل براکت هایی هست که دستوراتی در بین آنهاست، دستوراتی که برای هر عنصر به همراه حلقه for برای حلقه زدن روی هر عنصر اجرا میشوند.
نوشتار صحیح:
newList = [ expression(element) for element in oldList if condition ]
مثال:
# Python program to demonstrate list # comprehension in Python # below list contains square of all # odd numbers from range 1 to 10 odd_square = [x ** 2 for x in range(1, 11) if x % 2 == 1] print(odd_square)
خروجی:
[1, 9, 25, 49, 81]
برای درک بهتر، توجه کنید که کد فوق مشابه کد زیر است:
# for understanding, above generation is same as, odd_square = [] for x in range(1, 11): if x % 2 == 1: odd_square.append(x**2) print(odd_square)
خروجی:
[1, 9, 25, 49, 81]
متدهای لیست
تابع |
توضیحات |
append() |
افزودن یک عنصر به انتهای لیست |
extend() |
افزودن تمام عناصر یک لیست به لیست دیگر |
insert() |
درج یک مورد در اندیس تعریف شده |
remove() |
حذف یک عنصر از لیست |
cear() |
حذف تمام عناصر از لیست |
index() |
بازگرداندن شاخص اولین عنصر تحت جستجو |
count() |
بازگرداندن تعداد تکرار عناصری که به عنوان آرگومان ارسال شدهاند |
sort() |
مرتبسازی عناصر در یک لیست به ترتیب صعودی |
reverse() |
برعکس کردن ترتیب عناصر در لیست |
copy() |
بازگرداندن یک کپی از لیست |
pop() |
حذف و بازگرداندن عنصر در اندیس مشخص شده. اگر اندیسی ارائه نشود، آخرین مورد را حذف و بازمی گرداند. |
عملیاتهای ذکر شده بالا خود لیست را تغییر میدهند (تغییرات در خود لیست اعمال میگردد).
توابع داخلی لیست
تابع |
توضیح |
reduce() |
یک تابع خاص را به عنوان آرگومان روی تمام عناصر لیست اعمال می کند، نتایج میانی را ذخیره کرده و تنها مقدار جمعبندی نهایی را برمیگرداند. |
sum() |
مجموع اعداد در لیست را محاسبه میکند. |
ord() |
یک عدد صحیح که نمایانگر یونیکد کاراکتر یونیکد داده شده است را برمیگرداند. |
cmp() |
این تابع اگر لیست اول “بزرگتر” از لیست دوم باشد، مقدار 1 را برمیگرداند. |
max() |
بزرگترین عنصر لیست داده شده را برمیگرداند. |
min() |
کوچکترین عنصر لیست داده شده را برمیگرداند. |
all() |
اگر همه عناصر درست باشند یا اگر لیست خالی باشد، مقدار درست (True) را برمیگرداند. |
any() |
اگر هر عنصری از لیست درست باشد، مقدار درست (True) را برمیگرداند. اگر لیست خالی باشد، مقدار غلط (False) را برمیگرداند. |
len() |
طول لیست یا اندازه لیست را برمیگرداند. |
enumerate() |
یک شی enumerate از لیست را برمیگرداند. |
accumulate() |
یک تابع خاص را به عنوان آرگومان روی تمام عناصر لیست اعمال می کند، و یک لیست حاوی نتایج میانی را برمیگرداند. |
filter() |
بررسی میکند که هر عنصر لیست درست باشد یا خیر. |
map() |
یک لیست از نتایج بعد از اعمال تابع داده شده به هر عنصر از یک iterable داده شده را برمیگرداند. |
lambda() |
این تابع میتواند هر تعداد آرگومان داشته باشد اما تنها یک عبارت دارد که ارزیابی شده و برگردانده میشود. |