Автор оригинала: Marzia Deodato.
Python: Получить количество элементов в списке
Вступление
Получение количества элементов в списке в Python является обычной операцией. Например, вам нужно будет знать, сколько элементов в списке, когда вы будете перебирать его. Помните, что списки могут иметь в качестве своих элементов комбинацию целых чисел, чисел с плавающей точкой, строк, логических значений, других списков и т. Д.:
# List of just integers list_a = [12, 5, 91, 18] # List of integers, floats, strings, booleans list_b = [4, 1.2, "hello world", True]
Если мы подсчитаем элементы в list_a
, то получим в целом 5 элементов. Если мы сделаем то же самое для list_b
, то получим 4 элемента.
Есть разные способы получить количество элементов в списке. Подходы различаются независимо от того, хотите ли вы считать вложенные списки одним элементом или всеми элементами во вложенных списках, или вас интересуют только уникальные элементы и тому подобное.
Встроенная функция len()
Самый простой способ получить количество элементов в списке-это использовать встроенную в Python функцию 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
Как следует из функции name, len()
возвращает длину списка, независимо от типов элементов в нем.
Использование цикла for
Другой способ сделать это-создать функцию, которая выполняет цикл по списку с помощью цикла 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))
Запуск этого кода приведет к печати:
Number of elements in the list: 6
Это гораздо более подробное решение по сравнению с функцией len ()
, но стоит пройти через него, как мы увидим позже в статье, что та же идея может быть применена, когда мы имеем дело со списком списков. Кроме того, вы можете выполнить некоторую операцию либо над самими элементами, либо над операцией в целом, что здесь возможно.
Получить количество уникальных элементов в списке
Списки могут содержать несколько элементов, включая дубликаты. Если мы хотим получить количество элементов без дубликатов (уникальных элементов), мы можем использовать другую встроенную функцию set()
. Эта функция создает объект 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
Обратите внимание, что пустой список считается одним элементом. Если список внутри списка содержит более одного элемента, они не принимаются во внимание. Вот где пригодится цикл for .
Получить количество элементов в списке, содержащем другие списки
Если мы хотим подсчитать все элементы внутри списка, содержащего другие списки, мы можем использовать цикл 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()
не будет считать элементы внутри списков. Чтобы сделать это, нам нужно перебрать весь список.