وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پایتون: تعداد عناصر موجود در یک لیست را دریافت کنید

0 249
زمان لازم برای مطالعه: 6 دقیقه


معرفی

بدست آوردن تعداد عناصر در یک لیست در پایتون یک عملیات رایج است. برای مثال، هر زمان که فهرست را تکرار می‌کنید، باید بدانید که فهرست چند عنصر دارد. به یاد داشته باشید که لیست ها می توانند ترکیبی از انواع مانند اعداد صحیح، شناورها، رشته ها، بولی ها، لیست های دیگر و غیره را به عنوان عناصر خود داشته باشند:


list_a = (12, 5, 91, 18)


list_b = (4, 1.2, "hello world", True)

اگر به صورت دستی عناصر موجود را بشماریم list_a به طور کلی 5 عنصر دریافت می کنیم. اگر همین کار را برای list_b خواهیم دید که ما 4 عنصر داریم.

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

عملکرد داخلی len()

ساده ترین و رایج ترین راه برای به دست آوردن تعداد عناصر در یک لیست، استفاده از تابع داخلی پایتون است. len().

بیایید به مثال زیر نگاه کنیم:

list_a = ("Hello", 2, 15, "World", 34)

number_of_elements = len(list_a)

print("Number of elements in the list: ", number_of_elements)

که چاپ می شود:

Number of elements in the list: 5

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

با استفاده از a برای حلقه

راه دیگری که می توانیم این کار را انجام دهیم این است که تابعی ایجاد کنیم که با استفاده از a در لیست حلقه بزند for حلقه ابتدا تعداد عناصر را به 0 مقداردهی می کنیم و هر بار که تکرار حلقه انجام می شود، تعداد 1 افزایش می یابد.

حلقه زمانی به پایان می رسد که روی همه عناصر تکرار شود، بنابراین تعداد کل عناصر موجود در لیست را نشان می دهد:

list_c = (20, 8.9, "Hi", 0, "word", "name")

def get_number_of_elements(list):
    count = 0
    for element in list:
        count += 1
    return count

print("Number of elements in the list: ", get_number_of_elements(list_c))

اجرای این کد انجام خواهد شد print:

Number of elements in the list:  6

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

دریافت تعداد عناصر منحصر به فرد در یک لیست

لیست ها می توانند چندین عنصر از جمله موارد تکراری داشته باشند. اگر بخواهیم تعداد عناصر را بدون تکرار (المان های منحصر به فرد) بدست آوریم، می توانیم از یک تابع داخلی دیگر استفاده کنیم set(). این تابع یک a را ایجاد می کند set شی، که تمام مقادیر تکراری را رد می کند.

ما سپس آن را به len() تابع برای بدست آوردن تعداد عناصر موجود در set:

list_d = (100, 3, 100, "c", 100, 7.9, "c", 15)

number_of_elements = len(list_d)
number_of_unique_elements = len(set(list_d))

print("Number of elements in the list: ", number_of_elements)
print("Number of unique elements in the list: ", number_of_unique_elements)

که چاپ می کند:

Number of elements in the list: 8
Number of unique elements in the list:  5

ما می توانیم آن را ببینیم list_d در مجموع دارای 8 عنصر است که از میان آنها 5 عنصر منحصر به فرد هستند.

لیست لیست هایی که استفاده می کنند len()

در مقدمه این مقاله دیدیم که عناصر لیست ها می توانند از انواع داده های مختلف باشند. با این حال، لیست ها می توانند به نوبه خود فهرست ها را به عنوان عناصر خود داشته باشند. مثلا:

list_e = ((90, 4, 12, 2), (), (34, 45, 2), (9,4), "char", (7, 3, 19))

اگر از تابع داخلی استفاده کنیم len()، لیست ها به عنوان عناصر منفرد به حساب می آیند، بنابراین خواهیم داشت:

number_of_elements = len(list_e)

print("Number of elements in the list of lists: ", number_of_elements) 

که چاپ می کند:

Number of elements in the list of lists: 6

توجه داشته باشید که لیست خالی به عنوان یک عنصر به حساب می آید. اگر یک لیست در یک لیست حاوی بیش از یک عنصر باشد، آنها در نظر گرفته نمی شوند. این جایی است که a for حلقه می تواند مفید باشد.

تعداد کل عناصر موجود در یک لیست حاوی لیست های دیگر را بدست آورید

اگر بخواهیم تمام عناصر داخل یک لیست حاوی لیست های دیگر را بشماریم، می توانیم از a استفاده کنیم for حلقه ما می توانیم مقداردهی اولیه کنیم count متغیر را به 0 تبدیل کنید و در لیست حلقه بزنید. در هر تکرار حلقه، count طول آن لیست افزایش می یابد.

ما از تابع داخلی استفاده خواهیم کرد len() برای بدست آوردن طول:

list_e = ((90, 4, 12, 2), (), (34, 45, 2), (9,4), "char", (7, 3, 19))

def get_all_elements_in_list_of_lists(list):
    count = 0
    for element in list_e:
        count += len(element)
    return count

print("Total number of elements in the list of lists: ", get_all_elements_in_list_of_lists(list_e)) 

خروجی این است:

Total number of elements in the list of lists: 16

در این مثال باید به چند نکته مهم اشاره کرد. اولاً، این بار لیست خالی تأثیری بر تعداد کل نداشت. این به این دلیل است که در هر حلقه طول لیست تودرتوی فعلی را در نظر می گیریم و از آنجایی که طول یک لیست خالی 0 است، count 0 افزایش می یابد.

با این حال، شما می توانید ببینید که هر کاراکتر از رشته "char" در تعداد کل عناصر به حساب می آید. این به این دلیل است که len() تابع عمل می کند روی رشته با برگرداندن تعداد تمام کاراکترهای آن. ما می‌توانیم با استفاده از رویکرد مشابه در بخش زیر از این وضعیت اجتناب کنیم، که به ما امکان می‌دهد عناصری غیر از فهرست‌ها را نیز داشته باشیم.

یکی دیگر از راه‌های سرگرم‌کننده برای انجام همان کار در مثال قبلی، استفاده از درک فهرست است:

number_of_elements = sum((len(element) for element in list_e))

این خط در اصل دو کار را انجام می دهد. ابتدا یک لیست جدید حاوی طول تمام عناصر لیست اصلی ایجاد می کند. در مورد ما چنین خواهد بود (4, 0, 3, 2, 4, 3). در مرحله دوم، آن را فرا می خواند sum() تابع با استفاده از لیست جدید تولید شده به عنوان پارامتر، که مجموع کل عناصر را برمی گرداند و نتیجه دلخواه را به ما می دهد.

لیست های تو در تو

لیست های تو در تو لیست هایی هستند که عناصری از لیست های دیگر هستند. ممکن است چندین سطح از لیست ها در داخل یکدیگر وجود داشته باشد:

list_f = (30, 0.9, (8, 56, 22, ("a", "b")), (200, 3, (5, (89), 10)))

ما می توانیم آن را ببینیم ("a", "b") در لیست موجود است (8, 56, 22, ("a", "b"))، که به نوبه خود در لیست اصلی موجود است (30, 0.9,(200, 3, (5, (89), 10))).

دوباره، مقدار را مقداردهی اولیه می کنیم count متغیر به 0. اگر بخواهیم تعداد کلی عناصر در لیست تودرتو را بدست آوریم، ابتدا باید بررسی کنیم که آیا عنصر یک لیست است یا خیر. اگر اینطور باشد، داخل لیست حلقه می زنیم و به صورت بازگشتی تابع را فراخوانی می کنیم تا جایی که هیچ لیست تو در تو باقی نماند. همه عناصر به غیر از لیست ها (اعداد صحیح، رشته ها و غیره) تعداد را 1 افزایش می دهند.

توجه داشته باشید که این نیز راه حل مشکلات ناشی از رویکرد قبلی است.

بیایید نگاهی به کد شمارش عناصر در لیست های تودرتو بیندازیم:

list_f = (30, 0.9, (8, 56, 22, ("a", "hello")), (200, 3, (5, (89), 10)))

def get_elements_of_nested_list(element):
    count = 0
    if isinstance(element, list):
        for each_element in element:
            count += get_elements_of_nested_list(each_element)
    else:
        count += 1
    return count

print("Total number of elements in the nested list: ", get_elements_of_nested_list(list_f))

اجرای این کد به ما می دهد:

Total number of elements in the nested list: 12

توجه داشته باشید که ما از تابع داخلی استفاده کردیم isinstance() که بررسی می کند که آیا آرگومان اول نمونه ای از کلاس ارائه شده به عنوان آرگومان دوم است یا خیر. در تابع بالا، بررسی می کند که آیا عنصر یک لیست است یا خیر.

عنصر اول 30 یک عدد صحیح است، بنابراین تابع به عدد می‌پرد else مسدود می کند و تعداد را 1 افزایش می دهد. وقتی به آن رسیدیم (8, 56, 22, ("a", "hello"))، تابع یک لیست را تشخیص می دهد و به صورت بازگشتی از آن عبور می کند تا لیست های دیگر را بررسی کند.

نتیجه

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

با لیست لیست ها و لیست های تودرتو، len() عناصر داخل لیست ها را نمی شمرد. برای انجام این کار، باید کل لیست را مرور کنیم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-15 20:01:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید