Массивы
Большинство программ работает не с отдельными переменными, а с набором переменных. Например, программа может обрабатывать информацию об учащихся класса, считывая список учащихся с клавиатуры или из файла, при этом изменение количества учащихся в классе не должно требовать модификации исходного кода программы.
Раньше мы сталкивались с задачей обработки элементов последовательности, например, вычисляя наибольший элемент последовательности. Но при этом мы не сохраняли всю последовательность в памяти компьютера, однако, во многих задачах нужно именно сохранять всю последовательность, например, если бы нам требовалось вывести все элементы последовательности в возрастающем порядке (“отсортировать последовательность”).
Для хранения таких данных можно использовать структуру данных, называемую в Питоне список (в большинстве же языков программирования используется другой термин “массив”). Список представляет собой последовательность элементов, пронумерованных от 0, как символы в строке. Список можно задать перечислением элементов списка в квадратных скобках, например, список можно задать так:
Primes = [2, 3, 5, 7, 11, 13]
Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
В списке Primes — 6 элементов, а именно, Primes[0] == 2, Primes[1] == 3, Primes[2] == 5, Primes[3] == 7, Primes[4] == 11, Primes[5] == 13. Список Rainbow состоит из 7 элементов, каждый из которых является строкой.
Также как и символы строки, элементы списка можно индексировать отрицательными числами с конца, например, Primes[-1] == 13, Primes[-6] == 2.
Длину списка, то есть количество элементов в нем, можно узнать при помощи функции len, например, len(A) == 6.
Рассмотрим несколько способов создания и считывания списков. Прежде всего можно создать пустой список (не содержащий элементов, длины 0), в конец списка можно добавлять элементы при помощи метода append. Например, если программа получает на вход количество элементов в списке n, а потом n элементов списка по одному в отдельной строке, то организовать считывание списка можно так:
A = []
for i in range(int(input()):
A.append(int(input())
В этом примере создается пустой список, далее считывается количество элементов в списке, затем по одному считываются элементы списка и добавляются в его конец.
Для списков целиком определены следующие операции: конкатенация списков (добавление одного списка в конец другого) и повторение списков (умножение списка на число). Например:
A = [1, 2, 3]
B = [4, 5]
C = A + B
D = B * 3
В результате список C будет равен [1, 2, 3, 4, 5], а список D будет равен [4, 5, 4, 5, 4, 5]. Это позволяет по-другому организовать процесс считывания списков: сначала считать размер списка и создать список из нужного числа элементов, затем организовать цикл по переменной i начиная с числа 0 и внутри цикла считывается i-й элемент списка:
A = [0] * int(input())
for i in range(len(A)):
A[i] = int(input())
Вывести элементы списка A можно одной инструкцией print(A), при этом будут выведены квадратные скобки вокруг элементов списка и запятые между элементами списка. Такой вывод неудобен, чаще требуется просто вывести все элементы списка в одну строку или по одному элементу в строке. Приведем два примера, также отличающиеся организацией цикла:
for i in range(len(A)):
print(A[i])
Здесь в цикле меняется индекс элемента i, затем выводится элемент списка с индексом i.
for elem in A:
print(elem, end = ' ')
В этом примере элементы списка выводятся в одну строку, разделенные пробелом, при этом в цикле меняется не индекс элемента списка, а само значение переменной (например, в цикле for elem in [‘red’, ‘green’, ‘blue’] переменная elem будет последовательно принимать значения ‘red’, ‘green’, ‘blue’.
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
Как следует из названия, функция 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_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() . Для этого нам нужно перебрать весь список.
Посчитать количество одинаковых элементов в списке
Дан список целых чисел. Посчитать, сколько раз в нем встречается каждое число. Например, если дан список [1, 1, 3, 2, 1, 3, 4], то в нем число 1 встречается три раза, число 3 — два раза, числа 2 и 4 — по одному разу.
Решение задачи на языке программирования Python
Для хранения количества каждого встречающегося в списке значения создадим словарь. В нем ключами будут числа, которые встречаются в списке, а значениями — количества этих чисел в списке. Для примера, приведенного выше, в итоге должна получиться такая структура: .
Пусть в программе будет функция, которая заполняет список случайными числами в диапазоне и количестве, указанными пользователем.
Другая функция будет считать количество каждого значения и заносить данные в словарь. Алгоритм подсчета заключается в следующем. Если очередной элемент списка уже есть в качестве ключа словаря, то следует увеличить значение этого ключа на единицу. Если очередного элемента списка нет в качестве ключа в словаре, то такой ключ следует добавить и присвоить ему значение, равное единице.
Для того, чтобы вывести содержимое словаря в отсортированном по возрастанию ключей виде, используется функция sorted . Она сортирует ключи словаря и помещает их в список.
from random import randint def fill_list(minimum, maximum, amount, empty_list): for i in range(amount): empty_list.append(randint(minimum, maximum)) def analysis(from_list, to_dict): for i in from_list: if i in to_dict: to_dict[i] += 1 else: to_dict[i] = 1 lst = [] dct = {} mn = int(input('Минимум: ')) mx = int(input('Максимум: ')) qty = int(input('Количество элементов: ')) fill_list(mn, mx, qty, lst) analysis(lst, dct) for item in sorted(dct): print(f"'': ")
Минимум: 100 Максимум: 104 Количество элементов: 20 '100': 2 '101': 5 '102': 3 '103': 7 '104': 3
С другой стороны, если не требуется сохранять количества значений в программе, а надо только вывести их на экран (сохранить в файл, передать по сети), то задачу проще решить через использование спискового метода count() , который считает, сколько раз переданное в него значение встречается в списке, к которому применяется метод.
Если перебирать элементы самого списка, то метод count() будет вызываться несколько раз на одно и то же значение, если оно встречается в списке не единожды. Чтобы избежать этого, получим из списка множество и будем перебирать его элементы. Во множестве не бывает одинаковых значений.
from random import randint mn = int(input('Минимум: ')) mx = int(input('Максимум: ')) qty = int(input('Количество элементов: ')) lst = [randint(mn, mx) for i in range(qty)] s = set(lst) for i in s: print(f"'': ")
X Скрыть Наверх
Решение задач на Python
Получить количество элементов в списке Python
В этом посте мы обсудим, как получить общее количество элементов в списке Python.
1. Использование len() функция
Стандартный способ получить длину объекта — использовать встроенную функцию len() . Он возвращает целочисленное значение, указывающее общее количество элементов в объекте. Объект может быть
- последовательность (например, список, строка, кортеж или диапазон) или
- коллекция (например, словарь или набор)
Вот несколько примеров len() использование функции:
1. Получить длину списка
