ساختارهای داده و الگوریتم‌های پایه: لیست درک شده تو در تو - کوییز

لیست درک شده تو در تو

کدام یک از ساختار های داده زیر از مفهوم 'لیست درک شده تو در تو' (nested list comprehension) برای ایجاد خود استفاده می کند؟
  1. صف (Queue)
  2. پشته (Stack)
  3. لیست پیوندی (Linked List)
  4. مجموعه (Set)

گزینه صحیح: 3

توضیح: لیست پیوندی می تواند به صورت بازگشتی تعریف شود و هر گره آن می تواند شامل اشاره گری به گره بعدی باشد، که این ساختار امکان ایجاد لیست های تو در تو را فراهم می کند. ساختار های دیگر معمولاً خطی هستند.

در پایتون، کدام عبارت یک لیست درک شده تو در تو را برای ایجاد یک ماتریس 3x3 با مقادیر صفر نشان می دهد؟
  1. [ [0 for col in range(3)] for row in range(3) ]
  2. [ [0 for row in range(3)] for col in range(3) ]
  3. [ [0] * 3 ] * 3
  4. [[0]] * 3 * 3

گزینه صحیح: 1

توضیح: عبارت اول یک لیست درک شده تو در تو صحیح را ایجاد می کند که ابتدا لیست های داخلی (سطرها) با 3 صفر ساخته شده و سپس این لیست ها در یک لیست خارجی قرار می گیرند.

کدام یک از موارد زیر نمونه ای از یک لیست درک شده تو در تو برای مسطح کردن یک لیست از لیست ها است؟
  1. [x for x in sublist for sublist in matrix]
  2. [x for sublist in matrix for x in sublist]
  3. [sublist for sublist in matrix]
  4. [x for x in matrix]

گزینه صحیح: 2

توضیح: این عبارت، ابتدا روی هر 'sublist' در 'matrix' تکرار می کند و سپس روی هر 'x' در آن 'sublist' تکرار می کند و در نهایت یک لیست مسطح از عناصر تولید می کند.

اگر 'matrix' یک لیست از لیست ها باشد، عبارت `[element for row in matrix for element in row if element > 5]` چه کاری انجام می دهد؟
  1. یک لیست جدید از 'row' ها ایجاد می کند که عناصر آن ها بزرگتر از 5 است.
  2. یک لیست جدید از 'element' ها ایجاد می کند که بزرگتر از 5 هستند و از لیست های داخلی 'matrix' استخراج شده اند.
  3. یک لیست از 'matrix' با حذف عناصری که بزرگتر از 5 هستند، ایجاد می کند.
  4. ماتریس اصلی را تغییر می دهد تا فقط شامل عناصری باشد که بزرگتر از 5 هستند.

گزینه صحیح: 2

توضیح: این عبارت یک لیست جدید می سازد که شامل تمام 'element' ها از هر 'row' در 'matrix' است، به شرطی که آن 'element' بزرگتر از 5 باشد.

استفاده از لیست درک شده تو در تو برای ایجاد ماتریس ها چه مزایایی نسبت به حلقه های 'for' سنتی دارد؟
  1. کاهش خوانایی کد و افزایش پیچیدگی.
  2. افزایش کارایی و مختصرنویسی کد.
  3. عدم امکان ایجاد ماتریس های غیر مربعی.
  4. نیاز به تعریف صریح ابعاد ماتریس در هر بار.

گزینه صحیح: 2

توضیح: لیست های درک شده معمولاً کد را کوتاه تر و خواناتر می کنند و اغلب از نظر کارایی نیز بهینه تر هستند.

کدام عبارت یک لیست درک شده تو در تو را برای ایجاد یک لیست از مربع اعداد زوج بین 0 تا 10 (شامل 0 و 10) نشان می دهد؟
  1. [x*x for x in range(11) if x % 2 == 0]
  2. [x*x for x in range(0, 11, 2)]
  3. [x for x in range(11) if x % 2 == 0 and x*x]
  4. [x*x for x in range(10) if x % 2 == 0]

گزینه صحیح: 2

توضیح: این عبارت به طور مستقیم اعداد زوج را در بازه 0 تا 10 (شامل 10) انتخاب کرده و سپس مربع آن ها را محاسبه و در لیست قرار می دهد.

چه زمانی استفاده از لیست درک شده تو در تو برای ایجاد ساختار های پیچیده، ممکن است منجر به کاهش خوانایی کد شود؟
  1. وقتی که عمق تو در تو بودن بسیار زیاد باشد و منطق پیچیده شود.
  2. وقتی که تنها یک حلقه 'for' استفاده شود.
  3. وقتی که لیست نهایی خالی باشد.
  4. وقتی که عملیات ساده ای مانند جمع انجام شود.

گزینه صحیح: 1

توضیح: اگرچه لیست های درک شده کد را مختصر می کنند، اما تو در تو بودن بیش از حد یا منطق پیچیده در داخل آن ها می تواند خوانایی کد را به شدت کاهش دهد و استفاده از حلقه های 'for' سنتی را ترجیح دهد.

کدام یک از موارد زیر، یک مثال صحیح از لیست درک شده تو در تو برای ایجاد تمام جفت های ممکن از اعداد یک تا سه است؟
  1. [(x, y) for x in range(1, 4) for y in range(1, 4)]
  2. [(x, y) for y in range(1, 4) for x in range(1, 4)]
  3. [ (x, y) for x in [1, 2, 3] ]
  4. [ (1, 2, 3), (1, 2, 3) ]

گزینه صحیح: 1

توضیح: این عبارت ابتدا روی 'x' از 1 تا 3 تکرار می کند و سپس برای هر 'x'، روی 'y' از 1 تا 3 تکرار می کند و جفت (x, y) را ایجاد می کند.

منبع آموزشی این مطلب

این مطلب برگرفته از محصول آموزشی «اولین قدم‌های شما در دنیای کدنویسی با پایتون» است

برای مشاهده توضیحات کامل، جزئیات دوره و دریافت محصول، روی دکمه زیر کلیک کنید.

اطلاعات بیشتر و دریافت محصول
مقداد علی بخشی

مقداد علی بخشی

مقداد علی بخشی هستم. موسیقی دان، برنامه نویس، متخصص هوش مصنوعی، علم داده، متخصص بلاکچین و توسعه دهنده ربات های هوشمند. دانش آموخته مقطع ارشد و دکتری دانشکده فنی دانشگاه تهران هستم. با سابقه تدریس درس برنامه نویسی در دانشگاه (پردیس بین الملل کیش دانشگاه تهران)

مطالب مرتبط