Визначення розміру списку в Python: різні підходи
У цій статті ми розглянемо різні способи визначення кількості елементів у списку Python. Ми проаналізуємо кожен метод та з’ясуємо, який з них є найбільш ефективним у різних сценаріях.
Що таке список у Python?
Список у Python – це упорядкована колекція елементів, яка може зберігати дані різних типів. Один список може містити цілі числа, числа з плаваючою комою, текстові рядки, булеві значення та навіть інші списки.
Наведемо кілька прикладів створення списків:
int_list = [1, 2, 3, 4, 5] print(int_list) # Виведе: [1, 2, 3, 4, 5] float_list = [1.1, 2.2, 3.3, 4.4, 5.5] print(float_list) # Виведе: [1.1, 2.2, 3.3, 4.4, 5.5] string_list = ['Geekflare', 'Cloudflare', 'Amazon'] print(string_list) # Виведе: ['Geekflare', 'Cloudflare', 'Amazon'] boolean_list = [True, False] print(boolean_list) # Виведе: [True, False] nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]] print(nested_list) # Виведе: [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]] different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] print(different_datatype_list) # Виведе: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
Списки в Python можна створювати двома способами: за допомогою квадратних дужок або за допомогою конструктора списку.
square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] print(square_bracket_list) # Виведе: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] constructor_list = list((1, 1.1, 'techukraine.net', True, [1, 1.1, 'Geekflare', True])) print(constructor_list) # Виведе: [1, 1.1, 'techukraine.net', True, [1, 1.1, 'Geekflare', True]]
Обидва методи створюють ідентичні списки. Списки Python є змінними, допускають повторення елементів та доступні за індексом.
Методи визначення довжини списку
Існує кілька способів визначити довжину списку в Python:
- Використання вбудованої функції
len()
. - Застосування методу
length_hint
з модуляoperator
. - Створення власної функції з лічильником.
Спосіб 1: Застосування вбудованої функції len()
Функція len()
є вбудованою функцією Python, яка дозволяє визначити довжину не тільки списку, а й інших ітерованих об’єктів, таких як множини, кортежі та словники.
Приклад:
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = len(languages) print('Довжина списку мов:', languages_length)
Виведе:
Довжина списку мов: 5
Якщо у вас не встановлено Python, ви можете скористатися онлайн-компілятором для тестування коду.
Спосіб 2: Використання методу length_hint
з модуля operator
Метод length_hint
з модуля operator
призначений для отримання наближеної довжини ітерованого об’єкта. Його можна застосовувати до списків, множин, кортежів та словників. На відміну від вбудованої len()
, він потребує імпорту модуля operator
.
Приклад:
import operator languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = operator.length_hint(languages) print('Довжина списку мов (через operator.length_hint):', languages_length)
Виведе:
Довжина списку мов (через operator.length_hint): 5
Спосіб 3: Створення власної функції з лічильником
Цей метод передбачає використання циклу for
і лічильника для визначення довжини списку. Ми створимо власну функцію, яка прийматиме ітерований об’єкт як аргумент і повертатиме його довжину.
Фрагмент функції:
def iterable_count(iterable): length = 0 for item in iterable: length += 1 return length
Приклад застосування:
def iterable_count(iterable): length = 0 for item in iterable: length += 1 return length languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = iterable_count(languages) print('Довжина списку мов (через власну функцію):', languages_length)
Виведе:
Довжина списку мов (через власну функцію): 5
Аналіз трьох методів
Розглянемо продуктивність кожного методу на великих та малих списках.
Аналіз продуктивності на великому списку
import timeit import operator def iterable_count(iterable): length = 0 for item in iterable: length += 1 return length integer_list = list(range(1, 9999999)) start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (len()):', len_length) start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (length_hint):', len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (власна функція):', iterable_count_length)
Виведе:
3.957189619541168e-06 Довжина списку (len()): 9999998 3.0621886253356934e-06 Довжина списку (length_hint): 9999998 0.4059128537774086 Довжина списку (власна функція): 9999998
Як бачимо, length_hint
працює швидше при великій кількості елементів. Це пов’язано з тим, що він використовує внутрішні механізми CPython.
Аналіз продуктивності на малому списку
import timeit import operator def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length integer_list = list(range(1, 100)) start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (len()):', len_length) start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (length_hint):', len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Довжина списку (власна функція):', iterable_count_length)
Виведе:
7.813796401023865e-07 Довжина списку (len()): 99 1.1278316378593445e-06 Довжина списку (length_hint): 99 3.462657332420349e-06 Довжина списку (власна функція): 99
При невеликій кількості елементів функція len()
є найшвидшою.
У обох випадках власна функція з лічильником є найповільнішою.
Висновок
У цій статті ми розглянули різні методи визначення довжини списку Python, а також проаналізували їх продуктивність. Вбудована функція len()
є найоптимальнішою для більшості випадків. Метод length_hint
може бути ефективнішим при роботі з дуже великими списками, проте потребує імпорту модуля. Створення власної функції з лічильником є менш продуктивним варіантом.