Вступление
Получение количества элементов в списке в 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
Как следует из названия функции, 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()
не будет считать
элементы внутри списков. Для этого нам нужно просмотреть весь список в
цикле.