لیست در یک لیست در پایتون – نحوه راه اندازی یک لیست تودرتو


لیست ها یک نوع داده داخلی در پایتون هستند. و می توانید از آنها برای ذخیره مجموعه ای از عناصر استفاده کنید.
فهرست ها مرتب، قابل تغییر هستند و حاوی عناصری از انواع داده های مختلف هستند، مانند رشته ها ، اعداد صحیح و لیست های دیگر.
در پایتون، فهرست ها یک نوع بنیادی از ساختار داده هستند که شما اغلب از آنها استفاده می کنید، خواه توسعه دهنده وب، دانشمند داده یا هر چیز دیگری باشید.
نحوه ایجاد فهرست در پایتون
شما می توانید با جدا کردن عناصر با کاما و استفاده از براکت []
در پایتون یک فهرست ایجاد کنید. بیایید یک فهرست مثال ایجاد کنیم:
myList = [3.5, 10, "code", [ 1, 2, 3], 8]
از مثال بالا می بینید که یک فهرست می تواند شامل چندین نوع داده باشد. برای دسترسی به این عناصر در یک رشته، از نمایه سازی استفاده می کنیم. شاخص اول 0
، شاخص دوم 1
و غیره است.
فهرست ها دارای طیف گسترده ای از روش ها هستند مانند:
append()
: یک عنصر را به انتهای فهرست اضافه می کند.
insert()
: یک عنصر را در یک موقعیت مشخص در فهرست اضافه می کند.
remove()
: اولین رخداد یک عنصر مشخص شده را از فهرست حذف می کند.
pop()
: عنصر را در یک موقعیت مشخص در فهرست حذف می کند و آن را برمی گرداند.
sort()
: عناصر موجود در فهرست را به ترتیب صعودی مرتب می کند.
reverse()
: ترتیب عناصر موجود در فهرست را معکوس می کند.
count()
: تعداد دفعاتی که یک عنصر مشخص شده در فهرست ظاهر می شود را برمی گرداند.
index()
: ایندکس اولین رخداد یک عنصر مشخص شده در فهرست را برمی گرداند.
extend()
: فهرست را با اضافه کردن عناصری از تکرارپذیر دیگر گسترش می دهد.
در پایتون، شما همچنین می توانید فهرست هایی را در یک فهرست داشته باشید. و این چیزی است که در بخش بعدی به آن خواهیم پرداخت.
چگونه یک فهرست در یک فهرست در پایتون کار می کند
به فهرست ی که در فهرست ی دیگر قرار دارد در پایتون به عنوان یک لیست تودرتو گفته می شود. همچنین می توان بيان کرد که فهرست ی که فهرست های دیگری را به عنوان عناصر خود دارد، یک فهرست تودرتو است.
هنگامی که قصد داریم چندین مجموعه از داده های متصل را در یک فهرست نگه داریم، این می تواند مفید باشد.
در اینجا یک تصویر از یک فهرست تودرتو پایتون آمده است:
MyList = [[22, 14, 16], ["Joe", "Sam", "Abel"], [True, False, True]]
همانطور که قبلاً گفتیم، برای دسترسی به عناصر موجود در این فهرست تودرتو، از نمایه سازی استفاده می کنیم. برای دسترسی به یک عنصر در یکی از فهرستهای فرعی، از دو شاخص استفاده میکنیم: فهرست فهرست فرعی و نمایه عنصر درون فهرست فرعی.
بیایید از مثال فهرست تودرتو در بالا استفاده کنیم و به یک زیر فهرست /عنصر خاص دسترسی پیدا کنیم:
#printing a sublist print(MyList[0]) [22, 14, 16] # printing an element within a sublist print(MyList[0][1]) #output: 14 # modifying an element in a sublist MyList[0][1] = 20 print(MyList) #output:[[22, 20, 16], ["Joe", "Sam", "Abel"], [True, False, True]]
بیایید نگاهی بیندازیم که چگونه میتوانیم فهرست تودرتو را به درستی در پایتون مقداردهی اولیه کنیم.
نحوه راه اندازی یک فهرست تودرتو در پایتون
ما می دانیم که یک فهرست تو در تو فهرست ی در داخل یک فهرست دیگر است. اما ایجاد فهرست ی از فهرست ها در پایتون می تواند کمی مشکل باشد زیرا راه های اشتباه و راه های درستی برای انجام آن وجود دارد.
چگونه یک فهرست تودرتو را مقداردهی اولیه نکنیم
بیایید یکی از راههای اشتباه اولیه کردن فهرست تودرتو را ببینیم (اگرچه این ابتداییترین و سریعترین راه برای مقداردهی اولیه فهرست تودرتو است):
# Create a list with 5 references of same sublist MyList = [[]] * 5 print(MyList) #output: [[ ], [ ], [ ], [ ], [ ]]
راهاندازی یک فهرست تودرتو به این روش این عیب را دارد که هر ورودی در فهرست ID
یکسانی دارد و به همان شی فهرست اشاره میکند.
بیایید این را با چرخش در فهرست و چاپ شناسه هر شی زیر فهرست تأیید کنیم.
for objects in MyList: print(id(objects)) #output: 200792200 200792200 200792200 200792200 200792200
بیایید ببینیم چرا این بسیار بد است. ما یک عنصر را در فهرست فرعی دوم وارد می کنیم و سپس محتوای فهرست اصلی را تحلیل می کنیم.
# Insert 7 into the second sublist MyList[1].append(7) print(MyList) #output: [[7], [7], [7], [7], [7]]
این عنصر در همه فهرستهای فرعی درج شد، زیرا آنها شناسه یکسانی دارند. پس آنها فهرست های متفاوتی نیستند. پس همانطور که می بینید، این یک راه نادرست برای مقداردهی اولیه یک فهرست تودرتو است.
چگونه یک فهرست تودرتو را مقداردهی اولیه کنیم
استفاده از درک فهرست و محدوده ()
با استفاده از List Comprehension، میتوانیم یک فهرست فرعی ایجاد کنیم و آن را برای هر عنصر از یک دنباله اعداد از 0
تا n-1
که با استفاده از تابع range()
Python تولید کردهایم، به فهرست اصلی اضافه کنیم.
MyList = [[] for i in range(5)] print(MyList) #output: [[], [], [], [], []]
این یک فهرست تودرتو ایجاد می کند که دارای 5 فهرست فرعی است. حال بیایید ببینیم که آیا هر فهرست فرعی شناسه متفاوتی دارد یا خیر. ما همچنین یک عنصر را در فهرست فرعی درج خواهیم کرد.
# loop through the list and print each sublist id. for objects in MyList: print(id(objects)) #output: 200739688 200739944 200739848 200739912 200739880 # modify the element in a sublist – let's insert 7 in the second sublist MyList[1].append(7) print(MyList) #Output: [[], [7], [], [], []]
همانطور که می بینید، عنصر (7) فقط در فهرست فرعی دوم درج می شود و سایر زیر فهرست ها خالی می مانند زیرا همه آنها شناسه یا اشیاء متفاوتی دارند.
استفاده از حلقه for
فرض کنید میخواهیم فهرستی بسازیم که به صورت داخلی دارای چهار فهرست فرعی مختلف باشد. برای انجام این کار، ابتدا یک فهرست خالی جدید ایجاد می کنیم، سپس از یک حلقه for برای تکرار از 0 تا 3 استفاده می کنیم. پس از هر تکرار یک فهرست خالی به فهرست جدید اضافه می کنیم.
MyList = [] # Iterate over a sequence of numbers from 0 to 3 for i in range(4): # In each iteration, add an empty list to the main list MyList.append([]) print(MyList) # output: [[], [], [], []]
برای تأیید اینکه آیا همه فهرستهای فرعی دارای شناسههای متفاوتی هستند، میتوانید این کار را انجام دهید:
for objects in MyList: print(id(objects)) # output: 200792232 200792296 200792168 200740648
شناسههای متمایز هر فهرست فرعی این واقعیت را تأیید میکند که اینها اشیاء مجزا هستند.
با استفاده از Numpy
ماژول Numpy پایتون شامل تابعی به نام empty()
است که آرایه های Numpy خالی با یک شکل مشخص را تولید می کند. استفاده از Numpy برای مقداردهی اولیه یک فهرست تودرتو می تواند راهی عملی برای ساخت و کار با ساختارهای داده دو بعدی در پایتون باشد.
import numpy num = 5 # Create a 2D Numpy array of shape (5, 0) and convert it to a nested list MyList = numpy.empty((num, 0)).tolist() print(MyList) # output: [[], [], [], [], []]
اکنون 5 فهرست فرعی داریم - بیایید شناسه آنها را تحلیل کنیم.
for objects in MyList: print(id(objects)) # output: 200739944 200739848 200739912 200740616 200739688
این تأیید دیگری است که همه فهرستهای فرعی اشیاء متفاوتی هستند. پس اگر بخواهیم هر زیر فهرست را تغییر دهیم، زیر فهرست های باقی مانده تحت تأثیر قرار نمی گیرند.
نتیجه
ما به پایان این مقاله رسیدیم. نکات کلیدی این است که راه اندازی یک فهرست تودرتو می تواند مشکل باشد - و راه های نادرست (و چندین روش صحیح) برای انجام آن وجود دارد.
راههای زیادی وجود دارد که میتوانید فهرست تودرتو در پایتون را مقداردهی اولیه کنید، اما روشهای بالا محبوبترین و پرکاربردترین آنها هستند.
هنگامی که فهرست تودرتو را ایجاد کردیم، میتوانیم با استفاده از نمایهسازی همانطور که در بالا دیدید به عناصر آن دسترسی پیدا کرده و آنها را اصلاح کنیم.
بیایید در توییتر و لینکدین متصل شویم. همچنین می توانید در کانال یوتیوب من مشترک شوید.
کد نویسی مبارک!
ارسال نظر