List یا همان فهرست ، یکی ازپرکاربردترین ساختمان داده های موجود در پایتون است و کاربرد اصلی آن ذخیره چندین مقدارمختلف در یک متغیر واحد و دسترسی به همه آنها تنها با یک نام مشخص است. به زبان ساده تر به جای آنکه برای ذخیره موقت هر مقدار، یک متغیر جداگانه تعریف شود ، تنها یک متغیر تعریف و تمامی مقادیر مورد نیاز در آن ذخیره و از آن بازیابی می شوند. برای مثال برای محاسبه میانگین قد دانش آموزان یک مدرسه ، نیازی به تعریف متغیرهای جداگانه برای ذخیره قد هر دانش آموز نیست و می توان با تعریف یک list و ذخیره قد تمامی دانش آموزان مدرسه در آن پردازش مورد نیاز برای محاسبه میانگین قد را بر روی list انجام داد. در حقیقت فهرست یکی از چهار نوع داده موجود در پایتون است که ذخیره مجموعه ای از داده ها در یک متغیر واحد را ممکن می سازند. و هم زمان ابزارهای لازم برای جستجو ، افزودن ، حذف و به روزرسانی داده های ذخیره شده در آن را فراهم می آورند این چهار نوع عبارتند از :
فهرست (list)
چندتایی (tuple)
مجموعه (set)
واژه نامه (dictionary)
در پایتون یک فهرست به دو روش زیر ساخته می شود:
1- مقدار دهی مستقیم به یک متغیر
در این روش مقادیر مورد نظر که با نویسه , از هم جدا می شوند درون یک جفت علامت [] قرار می گیرند و سپس با استفاده از عملگر جایگزینی = در متغیر مورد نظر ذخیره می شوند.
مثال : فهرستی از شرکت های فعال در صتعت خودروسازی که دارای چهار مقدار است.
مثال : فهرستی از نمرات درس ریاضی دانش آموزان یک کلاس که دارای 10 عنصر است.
grades = [18,18.30,12,17.5,16,19,17,14.5,13,15]
print(grades)
2- استفاده از سازنده[1] کلاس List
مثال : فهرستی از نام دانش آموزان یک کلاس
مثال : فهرستی از نمرات درس ریاضی تعدادی از دانشجویان
grades=list((18,18.30,12,17.5,16,19,17,14.5,13,15))
print(grades)
فهرست ها دارای چهار ویژگی زیر هستند :
1- عناصر درون یک فهرست دارای ترتیب[2] مشخص هستند نه به این معنی که عناصر از کوچکترین مقدار به بزرگترین مقدار و یا برعکس مرتب شده اند بلکه به این معنی که عناصردرون فهرست دارای ترتیب قرار گیری مشخصی هستند به زبان ساده تر محل قرار گرفتن عناصر یک فهرست بر اساس ترتیب ورود آنها به فهرست و یا به هنگام تعریف و مقدار دهی اولیه به آن تعیین می شود . به عددی که نشان دهنده محل قرارگرفتن هر عنصر درون فهرست است شاخص[3] گفته می شود. شاخص گذاری عناصر موجود در یک فهرست از عدد صفر شروع می شود یعنی نخستین عنصر دارای شاخص صفر ، دومین عنصر دارای شاخص یک و به همین ترتیب آخرین عنصر دارای شاخص n-1 است که n طول فهرست یا همان تعداد عناصر موجود در فهرست است. ناگفته نماند که کلاس list دارای شگردهایی[4] است که می توانند ترتیب قرار گرفتن عناصر در یک فهرست را به هم بزنند اما در حالت کلی یک فهرست دارای ویژگی ترتیب است.
2- فهرست یک شی قابل تغییر[5] است به این معنی که پس از تعریف یک فهرست و مقدار دهی اولیه به آن می توان عناصر موجود در آن را حذف کرد ، تغییر داد و یا عناصر جدیدی به آن افزود.
3- عناصر درون یک فهرست می توانند تکراری باشند. توانایی فهرست ها در پذیرش مقادیر تکراری مرهون شاخص گذاری عناصر موجود در آن است تا زمانی که هر دو مقدار یکسان شاخص متفاوتی داشته باشند هیچ مشکلی پیش نخواهد آمد.
مثال : فهرست زیر دارای دو عنصر با مقدار تکراری "Blue" و شاخص های متفاوت 0 و 4 است
colorList = ["Blue", "Red", "Purple", "Green", "Blue"]
print(colorList)
4- هر یک از عناصر موجود در یک فهرست می توانند نوع داده متفاوتی داشته باشند
مثال : در فهرست myFavoritWords نخستین عنصر از نوع رشته ، دومین عنصر یک عدد صحیح و سومین عنصر یک عدد اعشاری است.
myFavoritWords = ["Hundai",20,56.5,"Iran"]
print(myFavoritWords)
همانگونه که گفته شد عناصر موجود دریک فهرست شاخص گذاری می شوند یعنی محل قرارگیری عناصر موجود در آن به ترتیب و با شروع از عدد صفر شماره گذاری می شود بنابراین میتوان با قراردادن شاخص هر عنصر درون عملگر انتخاب(جفت علامت []پس از نام فهرست) ، به مقدار آن دست یافت برای نمونه در مثال زیر student[0] نخستین عنصر فهرست یعنی “Arash” و student[3] چهارمین عنصر فهرست یعنی “Bahram” را بازیابی می کند. دقت کنید که شاخص گذاری عناصر در یک فهرست از صفر شروع می شود.
مثال :
فهرست ها از شاخص گذاری منفی هم پشتیبانی می کنند بدین معنی که آخرین عنصر یک فهرست یعنی نخستین عنصر از انتهای فهرست دارای شاخص -1 دومین عنصر از انتهای فهرست دارای شاخص -2 و به همین ترتیب تا نخستین عنصر که دارای شاخص –n است که n تعداد کل عناصر موجود در فهرست است.
student = ["Arash" , "Arman", "Mina" ,"Bahram", "Sepideh"]
1- |
2- |
3- |
4- |
5- |
شاخص گذاری منفی |
4 |
3 |
2 |
1 |
0 |
شاخص گذاری مثبت |
Sepideh |
Bahram |
Mina |
Arman |
Arash |
Student List |
مثال: دستور print(thislist[-1]) در کد زیر عنصر “Third” را چاپ خواهد کرد.
دیگر روش دستیابی به عناصر موجود دریک فهرست استفاده از حلقه for به همراه عملگر in است.
مثال :
به تعدادعناصر موجود در یک فهرست طول فهرست گفته می شود برای بدست آوردن طول یک فهرست می توانید از تابع len() استفاده کنید.
مثال :
grades = [18,18.30,12,17.5,16,19,17,14.5,13,15]
length = len(grades)
print(length) #OutPut is 10
مثال : کد زیر عناصر موجود در فهرست student را از انتها به ابتدا چاپ می کند. برای درک بهتر کد زیر دوباره یادآوری می شود که فهرست ها از شاخص گذاری منفی عناصر پشتیبانی می کنند بدین معنی که آخرین عنصر یک فهرست دارای شاخص -1 دومین عنصر از انتهای فهرست دارای شاخص -2 و به همین ترتیب تا نخستین عنصر از ابتدای فهرست که دارای شاخص –n است که n تعداد کل عناصر موجود در فهرست است.
می توان محدوده ای از عناصر موجود در یک فهرست را انتخاب کرد برای این کار باید محدوده عناصر مورد نظررا به صورت Start:End درون عملگرانتخاب(جفت علامت [] پس از نام فهرست) قرارداد یعنی محدوده مورد نظررا باید به صورت[Start:End] مشخص کرد در این حالت عناصری که دارای شاخص Start تا End-1 هستند انتخاب می شوند. بنابراین به یاد داشته باشید که شاخص End را یک واحد بیش از شاخص آخرین عنصر مورد نظر انتخاب کنید. مقدار پیش فرض شاخص Start صفر است پس اگر مقدار آن خالی رها شود محدوده انتخاب از نخستین عنصر موجود در فهرست شروع می شود همچنین مقدار مقدارپیش فرض شاخص End برابر طول فهرست است پس چنانچه مقدار آن خالی رها شود محدوده انتخاب از شاخص Start آغاز و تا آخرین عنصر موجود در فهرست که دارای شاخص n-1 است ادامه خواهد یافت. (n طول فهرست است)
مثال :
thislist = ["Arash" , "Arman", "Mina" ,"Bahram", "Sepideh"]
print(thislist[2:4])
خروجی کد بالا ["Mina" ,"Bahram"] است
مثال:
list1 = [10,20,30,40,50]
list2 = list1[:]
print(list2)
#output is : [10, 20, 30, 40, 50]
کد بالا تمامی عناصر موجود در list1 را انتخاب و در list2 قرار می دهد
مثال :
کد بالا عناصر "Arash" , "Arman", "Mina" ,"Bahram" را چاپ می کند
مثال : کد زیر عناصر "Mina" ,"Bahram", "Sepideh" را چاپ خواهد کرد
مثال : کد زیر عناصر "Mina" ,"Bahram" را چاپ می کند
thislist = ["Arash" , "Arman", "Mina" ,"Bahram", "Sepideh"]
partList = thislist[-3:-1]
print(partList)
برای اطمینان از موجود بودن عنصر مورد نظر در یک فهرست مشخص می توانید از دستور if به همراه عملگر in استفاده کنید.
مثال :
thislist = ["Arash" , "Arman", "Mina" ,"Bahram", "Sepideh"]
برای اطمینان از اینکه عنصر مورد نظر در فهرست وجود ندارد می توانید از دستور if به همراه عملگر not in استفاده کنید
مثال :
چنانکه گفته شد عناصر موجود در یک فهرست با استفاده از شاخص آنها دستیابی می شوند از این رو با دانستن شاخص عنصری که می خواهیم تغییر دهیم می توان به راحتی به آن دست یافت و مقدارش را تغییر داد. برای نمونه فهرست averages که به صورت زیر تعریف و مقداردهی شده است در بردارنده معدل تعدادی از دانشجویان دوره کارشناسی رشته حسابداری است در این فهرست معدل نخستین دانشجو که دارای شاخص صفر است 19 و معدل سومین دانشجوکه دارای شاخص 2 است 16 می باشد دقت کنید که شاخص عناصر موجود در یک فهرست به ترتیب قرار گرفتن آنها در فهرست و از صفر شروع می شود حال فرض کنید که معدل اولین و سومین دانشجو نیاز به تغییر دارد برای انجام این کار می توانید همانند زیر کد نویسی کنید :
averages = [19, 18, 16 , 18.8, 17, 15.5, 19.8 , 20 , 14]
averages[0] = 19.7
averages[2] = 17
print(averages)
#OutPut [19.7, 18, 17, 18.8, 17, 15.5, 19.8, 20, 14]
مثال : فهرست زیرحاوی حقوق دریافتی کارگران یک کارگاه صنعتی در پایان بهمن ماه سال 1401 با واحد پولی تومان است. مدیر کارگاه می خواهد به کارگرانی که حقوق ماهانه آنها کمتر از 5 میلیون تومان است 15 درصد اضافه حقوق پرداخت کند برنامه ای بنویسید که فهرست اولیه را بر اساس نظر مدیر کارگاه تغییرو فهرست جدید حقوق را در خروجی صفحه نمایش چاپ کند.
salary = [5500000, 4300000, 5600000, 7000000, 4400000, 5700000, 4000000 ]
حل :
salary = [ 5500000, 4300000, 5600000,7000000, 4400000,5700000,4000000]
print(salary)
i = 0
while i < len(salary):
if salary[i] < 5000000:
inc = salary[i] * 0.15
salary[i] += inc
i += 1
print(salary)
مثال : برنامه زیر عناصر دو فهرست به نام های list1 و list2 را با هم جابجا می کند
list1 = ["Arash", "Arman", "Farhad", "Rostam"]
list2 = ["Sepideh", "Dariush", "Faramarz","Nilufar"]
print("list1 Before Change: " , list1)
print("Listis Before Change: ", list2)
print("============================================")
i = 0
while i < len(list1):
temp = list1[i]
list1[i] = list2[i]
list2[i] = temp
i += 1
print("list1 After Change: " , list1)
print("Listis After Change: ", list2)
برای تغییر یک محدوده مشخص از عناصر موجود در یک فهرست ، در ابتدا باید فهرست جدیدی که دربردارنده مقادیرجدید مورد نظر است را بسازید و با استفاده از عملگر جایگزینی یا همان انتساب (=) آن را با محدوده مورد نظر از فهرستی که می خواهید تغییر دهید جایگزین کنید.
مثال : کد زیر عناصر موجود در فهرست second را جایگزین شش عنصر نخست فهرست first می کند.
first = [25, 12,10 ,11, 14, 12 , 13, 15, 16, 10 ,8 , 7]
second = [23, 14, 12, 10, 8, 9]
print(first)
first[0:6] = second
print(first)
همانگونه که گفته شد ساختمان داده list ابزارهای لازم برای جستجو ، افزودن ، حذف ، نسخه برداری و بروزرسانی داده های ذخیره شده در فهرست ها را فراهم می آورد. برای این منظور در کلاس list شگردهای[6] گوناگونی پیش بینی شده است که در ادامه به برخی از مهم ترین آنها می پردازیم :
با استفاده از این شگرد[7] می توان یک عنصر را در مکان دلخواهی از فهرست وارد کرد. الگوی کلی نگارش و بکارگیری این شگرد همانند زیر است :
list.insert(index, element)
این شگرد دارای دو ورودی ظاهری[8] است : ورودی نخست یا index همان شاخصی است که مکان قرار گیری عنصر مورد نظر در فهرست را مشخص می کند. دومین ورودی یا element همان عنصری است که می خواهید به فهرست اضافه شود. این ورودی می تواند یک شی از هر نوع داده ای باشد.
مثال : در کد زیر مقدار “Sina” در مکان اشاره شده توسط شاخص 1 در فهرست player درج می شود ، با توجه به اینکه شماره گذاری عناصر یک فهرست از صفر شروع می شود بنابراین مقدار “Sina” دومین عنصر موجود در فهرست player است.
Player = ["Arash", "Arman", "Kaveh"]
Player.insert(1, "Sina")
print(Player) #OutPut is ['Arash', 'Sina', 'Arman', 'Kaveh']
مثال : در کد زیر فهرست ClassAStudents در مکان اشاره شده توسط شاخص 2 در فهرست AllStudents درج می شود ، با توجه به اینکه شماره گذاری عناصر یک فهرست از صفر شروع می شود بنا براین فهرست ClassAStudents سومین عنصر موجود در فهرست AllStudents است.
AllStudents = ["Farhad", "Neda", "Mahin", "Omid"]
ClassAStudents = ["Simin", "Maryam", "Sara"]
AllStudents.insert(2, ClassAStudents)
print('Updated list:', AllStudents)
#OutPut is : Updated list: ['Farhad','Neda',['Simin','Maryam','Sara'], 'Mahin', 'Omid']
با استفاده از این شگرد می توان یک عنصر را در انتهای فهرست وارد کرد. به زبان ساده تر کار این شگرد درج یک عنصر در انتهای فهرست است.الگوی کلی نگارش و بکارگیری این شگرد همانند زیر است :
list.append(element)
شگرد append() تنها دارای یک ورودی ظاهری[9] به نام element است که همان عنصری است که می خواهید به انتهای فهرست اضافه شود. این ورودی می تواند یک شی از هر نوع داده ای باشد.
مثال :
fruts = ["apple", "banana", "cherry"]
fruts.append("orange")
print(fruts)
#output : ['apple', 'banana', 'cherry', 'orange']
با استفاده از شگرد extend() می توان تمامی عناصر موجود در یک فهرست دیگر و یا هر نوع داده قابل پیمایشی چون set ، tuple و dictionary را در انتهای فهرست مورد نظر وارد کرد. به زبان ساده تر کار این شگرد درج تمامی عناصر موجود در یک شی قابل شمارش در انتهای یک فهرست است. الگوی کلی نگارش و بکارگیری این شگرد به شکل زیر است :
list.extend(iterable)
شگرد extend() تنها دارای یک ورودی ظاهری به نام iterable است که همان شی قابل شمارشی است که می خواهید عناصر موجود در آن در انتهای فهرست مورد نظر درج گردند. این ورودی می تواند یک شی از نوع list ، tuple ، set ، dictionary و یا هر نوع داده قابل پیمایش دیگری باشد.
مثال :
A = ["Farhad", "Neda", "Mahin", "Omid"]
B = ["Simin", "Maryam", "Sara"]
A.extend(B)
print(A)
#output : ['Farhad', 'Neda', 'Mahin', 'Omid', 'Simin', 'Maryam', 'Sara']
مثال : در کد زیر یک شی از نوع داده مجموعه (set) به نام frutSet به انتهای فهرست fruts اضافه شده است. با نوع داده set در فصل های بعدی این کتاب آشنا خواهید شد.
fruts = ["apple", "banana", "cherry"]
frutSet = ("kiwi", "orange")
fruts.extend(frutsSet)
print(fruts)
#output : ['apple', 'banana', 'cherry', 'kiwi', 'orange']
برای حذف یک عنصر دلخواه از یک فهرست مشخص سه روش وجود دارد :
1- استفاده از شگرد remove()
2- استفاده از شگرد pop()
3- بکارگیری دستور del
شگردremove() برای حذف یک عنصر بر اساس مقدار آن بکار می رود به زبان ساده تر ورودی این شگرد مقداری است که می خواهید از فهرست حذف گردد برای نمونه در مثال زیر می خواهیم نخستین عنصری که دارای مقدار 18 است از فهرست grades حذف شود :
grades = [20, 18.5, 15, 17, 18, 16 , 19, 18, 15]
print(grades)
grades.remove(18)
print(grades)
#output [20, 18.5, 15, 17, 18, 16, 19, 18, 15]
#output [20, 18.5, 15, 17, 16, 19, 18, 15]
شگرد pop() برای حذف یک عنصر از فهرست بر اساس شاخص آن بکار می رود به زبان ساده تر ورودی این شگرد شاخص عنصری است که می خواهید از فهرست حذف شود برای نمونه در مثال زیر می خواهیم چهارمین عنصر فهرست حذف گردد با توجه به اینکه شاخص گزاری عناصر موجود در یک فهرست از صفر شروع می شود پس دستور grades.pop(3) منظور ما را برآورده می سازد :
grades = [20, 18.5, 15, 17, 18, 16 , 19, 18, 15]
print(grades)
grades.pop(3)
print(grades)
#output [20, 18.5, 15, 18, 16, 19, 18, 15]
چنانچه شاخصی برا ی شگرد pop() مشخص نشود این شگرد آخرین عنصر موجود در فهرست را حذف خواهد کرد :
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
Customers.pop()
print(Customers)
#output ['arash', 'Arman', 'Farhad']
دستور del هم برای حذف یک عنصر از فهرست بر اساس شاخص آن بکار می رود :
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
del Customers[3]
print(Customers)
#output ['arash', 'Arman', 'Farhad']
دستور del توانایی حذف کل یک فهرست را دارد و با استفاده از آن می توان فهرست مورد نظر را حذف کرد :
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
del Customers
print(Customers)
#output Error name 'Customers' is not defined
شگرد clear() برای خالی کردن یک فهرست از عناصر موجود در آن استفاده می شود این شگرد تمامی عناصر موجود در یک فهرست را حذف می کند اما خود فهرست همچنان باقی می ماند و می توان دوباره عناصر جدیدی در آن ذخیره کرد.
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
Customers.clear()
print(Customers)
#output []
پیمایش یک فهرست به معنای حرکت در میان عناصر موجود در آن و خواندن مقدار هر یک از آنها به ترتیب ملاقات است. پیمایش می تواند از یک نقطه دلخواه آغاز و در یک نقطه دلخواه دیگر به پایان برسد. در بسیاری ازکاربردها نخستین عنصر فهرست نقطه آغاز پیمایش است و آخرین عنصر موجود در فهرست نقطه پایان. جهت پیمایش می تواند از ابتدا به انتهای فهرست و یا برعکس باشد. پیمایش یک فهرست با استفاده از حلقه ها انجام می شود:
مثال: پیمایش فهرست Customers با استفاده از حلقه for
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
for itm in Customers:
print(itm)
مثال : پیمایش فهرست Customers با استفاده از حلقه while
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
i=0
while i < len(Customers):
print(Customers[i])
i += 1
مثال : پیمایش فهرست Customers با بهره گیری از حلقه for ، مفهوم شاخص و دستور range()
Customers = ["arash" , "Arman", "Farhad", "Kaveh"]
for i in range(len(Customers)):
print(Customers[i])
فهرست برگزیده[10] یک شیوه ساده در پایتون برای پالایش یک فهرست بر اساس برخی از معیارهای مورد نظر برنامه نویس و ساخت یک فهرست جدید است به زبان ساده تر راهی ساده برای ساخت یک فهرست جدید از روی یک فهرست موجود بر مبنای معیارهای دلخواه است.برای مثال می خواهیم از فهرستی به نام StudentsGrades که دربردارنده نمرات درس ریاضی تعدادی از دانش آموزان است فهرست جدیدی بدست آوریم که دربردارنده نمره های بالاتر از 17 است برای حل این مسئله در ابتدا از روش قدیمی پیمایش استفاده می کنیم :
StudentsGrades =[15,16.5,17.8,19,18,20,14,16,13,19.5]
print(StudentsGrades)
NewGrades=[]
for x in StudentsGrades:
if x > 17:
NewGrades.append(x)
print(NewGrades)
با روش فهرست برگزیده برنامه حل مسئله به صورت زیر نوشته می شود :
StudentsGrades =[15,16.5,17.8,19,18,20,14,16,13,19.5]
print(StudentsGrades)
NewGrades=[x for x in StudentsGrades if x > 17 ]
print(NewGrades)
همانگونه که دیده می شود فهرست برگزیده موجب کوتاه تر شدن کد و فشرده نویسی آن می شود و در نتیجه خوانایی برنامه افزایش می یابد.
مثال : از فهرست country که در بردارنده نام برخی از کشورهاست کشورهایی را انتخاب کنید که در نام آنها نویسه a وجود نداشته باشد.
country = ["Iran","Canada","China","Egypt","Greece","India", "Italy"]
print(country)
Newcountry = [x for x in country if "a" not in x ]
print(Newcountry)
#output is ['Egypt', 'Greece']
مثال : فهرست country در بردارنده نام تعدادی از کشورهاست برنامه ای بنویسید که تمامی حروف موجود در نام هر کشور را به حروف بزرگ تبدیل و نتیجه را در لیست جدیدی به نام Newcountry ذخیره کند این مسئله را هم به روش حلقه عادی وهم به روش فهرست برگزیده برنامه نویسی کنید:
برنامه نویسی راه حل مسئله به روش پیمایش حلقه
country = ["Iran", "Canada","China","Egypt","Greece","India","Italy"]
print(country)
Newcountry = []
for x in country:
Newcountry.append(x.upper())
print(Newcountry)
#output ['IRAN', 'CANADA','CHINA','EGYPT', 'GREECE', 'INDIA', 'ITALY']
برنامه نویسی راه حل مسئله به روش فهرست برگزیده :
country =["Iran", "Canada","China","Egypt", "Greece","India","Italy"]
print(country)
Newcountry = [x.upper() for x in country]
print(Newcountry)
#output ['IRAN','CANADA','CHINA', 'EGYPT','GREECE','INDIA','ITALY']
مرتب سازی یک فهرست به معنای چیدن عناصر موجود در آن به ترتیبی مشخص است. برای مثال یک فهرست که در بردارنده وزن دانش آموزان یک مدرسه است را می توان به صورت افزایشی (به ترتیب از کمترین وزن به بیشترین وزن ) و یا کاهشی (به ترتیب از بیشترین وزن به کم ترین وزن) مرتب کرد. اهمیت مرتب سازی فهرست ها در تاثیر چشمگیرآن بر کاهش زمان جستجودریک فهرست است الگوریتم های جستجو در یک فهرست مرتب شده نسبت به الگوریتم های جستجو در یک فهرست نامرتب بسیار سریعتر هستند. کلاس list در پایتون دارای شگردی به نام sort() است که برای مرتب سازی اشیای از نوع list بکار می رود :
مثال :
numbers = [17,12,8,20,14,45,78]
print(numbers)
#output [17, 12, 8, 20, 14, 45, 78]
numbers.sort()
print(numbers)
#output[8, 12, 14, 17, 20, 45, 78]
نوع مرتب سازی این شگرد به صورت پیش فرض افزایشی است و مبنای مرتب سازی آن نیز الفبایی است برای مجبور کردن شگرد sort() به مرتب سازی فهرست به صورت کاهشی باید از آرگومان نامدار reverse با مقدار True استفاده کنید.
مثال :
numbers = [17,12,8,20,14,45,78]
print(numbers) #output [17, 12, 8, 20, 14, 45, 78]
numbers.sort(reverse = True)
print(numbers) #output [78, 45, 20, 17, 14, 12, 8]
در شگرد sort() با استفاده از آرگومان نامدار key میتوانید نام تابعی که می خواهید عمل مرتب سازی فهرست بر اساس مقدار برگشتی آن انجام شود را به شگرد ارسال کنید برای مثال در کد زیر مرتب سازی فهرست names بر اساس خروجی تابع nameLen انجام می شود این تابع طول یک رشته را بر می گرداند بنابراین مرتب سازی فهرست names براساس طول عناصر موجود در فهرست انجام می شود نه بر اساس مقدار آنها.
def nameLen(name):
return len(name)
names = ["iran","arash","arman","dariush","ali", "iran manesh"]
names.sort(key = nameLen )
print(names)
#output ['ali', 'iran', 'arash', 'arman', 'dariush', 'iran manesh']
شگرد sort() حساس به بزرگی و کوچکی حروف است بنابراین از دید این شگرد حروف بزرگ زبان انگلیسی پیش از حروف کوچک قرار می گیرند.
مثال :
names = ["arash","Arash","ARash"]
names.sort()
print(names) #output ['ARash', 'Arash', 'arash']
برای وادار کردن شگرد sort() به مرتب سازی یک فهرست دربردارنده رشته ها بدون توجه به بزرگی و کوچکی حروف می توانید نام تابع lower() موجود در کلاس str را با استفاده از آرگومان نامدار key به این شگرد ارسال کنید.
مثال :
names = ["arash","Arash","ARash"]
names.sort(key = str.lower)
print(names) #output ['arash', 'Arash', 'ARash']
فرض کنید فهرستی به نام list1 دارید و می خواهید از آن نسخه دیگری به نام list2 داشته باشید به زبان ساده تر قصد دارید تمامی عناصر موجود در فهرست list1 در فهرست مستقلی به نام list2 نیز قرارگیرند در نگاه اول به نظر می رسد که ساده ترین راه برآوردن این هدف استفاده از یک دستور انتساب ساده به شکل list2 = list1 است اما این راه حل نمی تواند منظور ما را برآورده کند چرا که در این حالت هم list1 و هم list2 به یک مکان واحد در حافظه اصلی[12] اشاره خواهند کرد یعنی هر دو دارای نشانی حافظه[13] یکسان هستند به زبان ساده تر با اجرای دستوری به شکل list2 = list1 متغیر list2 تنها یک ارجاع یا اشاره گر به list1 است و یک فهرست مستقل نیست.
پس هر تغییری در list1 به صورت خودکار در list2 نیز بازتاب خواهد یافت . در پایتون هر متغیری شناسه یکتای خود را دارد که همان نشانی[14] محل ذخیره سازی آن در حافظه است برای بدست آوردن شناسه یکتای هر متغیرازدستور id() استفاده می شود پس بنا برآنچه گفته شد در مثال زیر خروجی دستور id() برای هردو فهرست list1 و list2 یکسان خواهد بود :
list1 = [5, 6, 8, 9]
list2 = list1
print(id(list1))
# output 2291753940288
print(id(list2))
# output 2291753940288
برای چیره شدن بر این مشکل در کلاس list شگردی به نام copy() پیش بینی شده است که وظیفه آن ایجاد یک فهرست مستقل از یک فهرست موجود است.
مثال :
list1 = [10, 15, 20, 18]
list2 = list1.copy()
print(list2)
روش دیگر نسخه برداری از یک فهرست استفاده از مفهوم انتخاب عناصر فهرست بر اساس محدوده است برای مثال :
list1 = [10, 15, 20, 18]
list2 = list1[:]
print(list2)
برای چسباندن دو و یا چند فهرست به یکدیگر چندین روش وجود دارد که عبارتند از :
1- استفاده از عملگر +
مثال :
list1 = [10, 15, 20, 18]
list2 = [7, 5, 9, 17, 22]
list3 = [12, 14, 15]
list4 = list1 + list2 + list3
print(list4)
#outputis : [10, 15, 20, 18, 7, 5, 9, 17, 22, 12, 14, 15]
2- استفاده از حلقه for
مثال :
list1 = [10, 15, 20, 18]
list2 = [7, 5, 9, 17, 22]
list3 = [12, 14, 15]
for x in list2:
list1.append(x)
for x in list3:
list1.append(x)
print(list1)
3- بکار گیری شگرد extend()
مثال :
list1 = [10, 15, 20, 18]
list2 = [7, 5, 9, 17, 22]
list3 = [12, 14, 15]
list1.extend(list2)
list1.extend(list3)
print(list1)
چکیده ای از شگردهای موجود در کلاس list |
|
کارکرد |
شگرد |
افزودن یک عنصر به انتهای فهرست |
append() |
پاک کردن همه عناصر موجود در یک فهرست |
clear() |
نسخه برداری از یک فهرست |
copy() |
شمارش تعداد تکرار ورودی دستور در فهرست |
count() |
افزودن عناصر موجود درهر نوع قابل پیمایش به انتهای فهرست |
extend() |
بدست آوردن شاخص نخستین عنصر یکسان با ورودی دستور |
index() |
افزودن یک عنصر در مکان مشخصی از فهرست |
insert() |
حذف یک عنصر از مکان مشخصی در فهرست |
pop() |
حذف نخستین عنصر یکسان با ورودی دستور از فهرست |
remove() |
معکوس کردن ترتیب عناصریک فهرست |
reverse() |
مرتب کردن یک فهرست |
sort() |