Рубрики
Без рубрики

Python: Получить количество элементов в списке

В этой статье мы рассмотрим, как получить количество элементов в списке в Python. Мы рассмотрим примеры получения всех элементов, уникальных элементов и элементов во вложенных списках.

Автор оригинала: 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() не будет считать элементы внутри списков. Чтобы сделать это, нам нужно перебрать весь список.