جلسه بیشت و یکم
ساختمان داده های تودرتو
در پایتون، “nesting” به معنی قرار دادن یک ساختار داده درون ساختار داده دیگر است. به عبارت دیگر، nesting در پایتون به ایجاد ساختارهای داده درون-تودرتو اشاره دارد.
در پایتون، انواع مختلفی از ساختارهای داده قابل nesting هستند، از جمله:
1. **لیست درون-لیست (List within List):**
– در این حالت، هر عنصر از یک لیست میتواند خود یک لیست باشد.
– مثال:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<xmp>my_list = [ [15 , 20 , 18], [17 , 20 , 20], [12 , 16 , 15], [20 , 20 , 20] ] j = 1 for i in my_list: print(f'nomarat nafar{j} = {i}') j += 1</xmp> |
این کد یک لیست دوبعدی به نام my_list تعریف میکند که هر عنصر آن یک لیست دیگر است.سپس، از یک حلقه for استفاده میکند که در هر تکرار، یکی از زیرلیستهای my_list را به متغیر i اختصاص میدهد.در هر تکرار، کد یک رشته فرمت شده چاپ میکند که در آن شماره نفر و محتوای لیست آن نفر نمایش داده میشود.همچنین، متغیر j به عنوان شمارنده نفرات افزایش پیدا میکند.
2. **دیکشنری درون-دیکشنری (Dictionary within Dictionary):**
– در این حالت، هر کلید یا مقدار در یک دیکشنری میتواند خود یک دیکشنری باشد.
– مثال:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<xmp>users = { 'aeinstein': { 'first': 'albert', 'last': 'einstein', 'location': 'princeton', }, 'mcurie': { 'first': 'marie', 'last': 'curie', 'location': 'paris', }, } for username, user_dict in users.items(): print("nUsername: " + username) full_name = user_dict['first'] + " " full_name += user_dict['last'] location = user_dict['location'] print("tFull name: " + full_name.title()) print("tLocation: " + location.title())</xmp> |
این کد یک ساختار دادهای به شکل دیکشنری به نام users دارد که در آن هر کلید (نام کاربری) به یک دیکشنری دیگر اشاره دارد که حاوی اطلاعات مربوط به آن کاربر است.سپس، کد از یک حلقه for استفاده میکند که در هر تکرار، یک کلید-مقدار زوج از دیکشنری users را به متغیرهای username و user_dict اختصاص میدهد.در داخل این حلقه، کد ابتدا نام کاربری را چاپ میکند. سپس، از اطلاعات موجود در user_dict برای ساخت نام کامل کاربر و چاپ آن استفاده میکند. همچنین، محل اقامت کاربر را از user_dict میخواند و آن را چاپ میکند.
3. **لیست درون-دیکشنری (List within Dictionary):**
– در این حالت، مقدار هر کلید در یک دیکشنری میتواند یک لیست باشد.
– مثال:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<xmp># Store multiple languages for each person. fav_languages = { 'jen': ['python', 'ruby'], 'sarah': ['c'], 'edward': ['ruby', 'go'] } # Show all responses for each person. for name, langs in fav_languages.items(): print(name + ": ") for lang in langs: print("- " + lang)</xmp> |
این کد یک ساختار دادهای به شکل دیکشنری به نام fav_languages دارد که در آن هر کلید (نام) به لیستی از زبانهای مورد علاقه آن فرد اشاره دارد.سپس، کد از یک حلقه for استفاده میکند که در هر تکرار، یک کلید-مقدار زوج از دیکشنری را به متغیرهای name و langs اختصاص میدهد.در داخل این حلقه، کد ابتدا نام فرد را چاپ میکند، و سپس از یک حلقه for دیگر استفاده میکند که در هر تکرار، یک زبان از لیست langs را به متغیر lang اختصاص میدهد و آن را با علامت “-” چاپ میکند.
4. **دیکشنری درون-لیست (Dictionary within List):**
– در این حالت، هر عنصر در یک لیست میتواند خود یک دیکشنری باشد.
– مثال:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<xmp># Define a list of users, where each user # is represented by a dictionary. users = [ { 'last': 'fermi', 'first': 'enrico', 'username': 'efermi', }, { 'last': 'curie', 'first': 'marie', 'username': 'mcurie', }, ] # Show all information about each user. for user_dict in users: for k, v in user_dict.items(): print(k + ": " + v) print("n")</xmp> |
این کد یک ساختار دادهای را نمایش میدهد که شامل یک لیست از دیکشنریهاست. هر دیکشنری در این لیست نمایانگر یک کاربر و یک عنصر از لیست است و دارای سه کلید است: ‘last’، ‘first’ و ‘username’.برای نمایش اطلاعات هر کاربر، کد از دو حلقه for استفاده میکند:1 . حلقه بیرونی for user_dict in users: که هر دیکشنری در لیست users را به متغیر user_dict اختصاص میدهد. 2 . حلقه درونی for k, v in user_dict.items(): که هر کلید-مقدار زوج در هر دیکشنری را به متغیرهای k و v اختصاص میدهد. سپس، کد هر کلید و مقدار را با استفاده از print() چاپ میکند و در پایان یک خط خالی چاپ میکند تا خروجی هر کاربر را از بقیه جدا کند.
به تعداد ساختمان داده استفاده شده می توان حلقه استفاده کرد.
Nesting در پایتون به شما این امکان را میدهد که ساختارهای داده پیچیدهتری را ایجاد کنید و اطلاعات را به شکل منظم و سازمانیافتهتری ذخیره و مدیریت کنید. این ویژگی به ویژه در کار با دادههای پیچیده و ساختارمند مانند JSON یا XML بسیار کاربردی است.
مثال :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<xmp>from collections import OrderedDict # Store each person's languages, keeping # track of who respoded first. fav_languages = OrderedDict() fav_languages['jen'] = ['python', 'ruby'] fav_languages['sarah'] = ['c'] fav_languages['edward'] = ['ruby', 'go'] fav_languages['phil'] = ['python', 'haskell'] # Display the results, in the same order they # were entered. for name, langs in fav_languages.items(): print(name + ":") for lang in langs: print("- " + lang)</xmp> |
مثال :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<xmp>aliens = [] # Make a million green aliens, worth 5 points # each. Have them all start in one row. for alien_num in range(1000000): new_alien = {} new_alien['color'] = 'green' new_alien['points'] = 5 new_alien['x'] = 20 * alien_num new_alien['y'] = 0 aliens.append(new_alien) # Prove the list contains a million aliens. num_aliens = len(aliens) print("Number of aliens created:") print(num_aliens)</xmp> |