Python — карта, фильтр, уменьшение

Mar 06 2023
КАРТА Во-первых, давайте разберемся, зачем нам нужна функция карты и как она помогает нам сократить нашу работу и сделать наш код более эффективным. Предположим, у нас есть список для работы, как показано ниже, но проблема со списком в том, что все элементы, присутствующие в нем, имеют строковый формат, поэтому, если мы попытаемся выполнить какие-либо числовые операции, это не даст никакого результата.

КАРТА

Во-первых, давайте разберемся, зачем нам нужна функция карты и как она помогает нам сократить объем работы и сделать наш код более эффективным.

Предположим, у нас есть список для работы, как показано ниже, но проблема со списком в том, что все элементы, присутствующие в нем, имеют строковый формат, поэтому, если мы попытаемся выполнить какие-либо числовые операции, это не даст никакого результата.

l1 = ["3","5","9","12","25"]
x = l1[0]+1
print(x)
----------------------------------------------------------------------
-----
TypeError Traceback (most recent call
last)
Input In [1], in <cell line: 2>()
1 l1 = ["3","5","9","12","25"]
----> 2 x = l1[0]+1
3 print(x)
TypeError: can only concatenate str (not "int") to str

Один из способов обойти это — цикл for, давайте посмотрим

for i in range(len(l1)):
l1[i] = int(l1[i])

x = l1[0]+1
print(x)
4

Мы возьмем другой список с именем l2 и снова выполним ту же операцию.

l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4

Теперь давайте также посмотрим на несколько других примеров, предположим, мы хотим узнать квадратные значения всего списка, давайте посмотрим, как мы можем это сделать с помощью функции карты.

Во-первых, давайте напишем функцию «sq», которая будет возвращать квадратное значение заданного числа.

def sq(a):
  return a*a

l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]

Теперь давайте посмотрим на что-то более сложное, чего мы сейчас пытаемся достичь, так это получить квадрат и куб чисел из 0,8, хранящихся в списке. Теперь мы будем использовать функцию карты, функцию лямбда, а также наше ключевое слово def для описания функций квадрата и куба. Затем мы будем использовать цикл for для создания списка.

def sq(a):
  return a*a
def cube(a):
  return a*a*a
func = [sq,cube]
for i in range(8):
  rslt = list(map(lambda x:x(i) ,func))
print(rslt)
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
[25, 125]
[36, 216]
[49, 343]

Как следует из названия, функция фильтра помогает нам фильтровать заданный набор итерируемых объектов, в качестве аргумента она принимает указанную функцию, на основе которой мы будем фильтровать наши итерируемые объекты, а затем принимает сами итерируемые объекты в качестве аргументов. Ниже приведены 3 типа фильтров: один будет фильтровать числа больше 10 из списка, один будет фильтровать числа меньше 10, а третий будет иметь множественное условие, в котором указано, что число должно быть больше 10, но меньше 15.

l1 = [34,12,5,8,11,14,19,10,1,50]
def grt_condi(num):
  return num>10
def lsr_condi(num):
  return num<10
def multi_condi(num):
  return num>10 and num<15

l2 = list(filter(grt_condi,l1))
l3 = list(filter(lsr_condi,l1))
l4 = list(filter(multi_condi,l1))

print(l2)
print(l3)
print(l4)
[34, 12, 11, 14, 19, 50]
[5, 8, 1]
[12, 11, 14]

Давайте разберемся, что делает функция сокращения и какую проблему она решает. Чтобы понять это, давайте сначала возьмем постановку задачи и наш традиционный подход к ее решению.

Допустим, есть список, и мы хотим получить сумму всех целых чисел, присутствующих в списке.

l6 = [2,3,6,5,8,9,10]
x = 0
for i in l6:
  x = x+i
print(x)
43

from functools import reduce
l7 = reduce(lambda x,y:x+y , l6)
print(l7)
43

Чтобы узнать больше такого контента, следите за моим профилем на Medium и странице LinkedIn —https://www.linkedin.com/in/chandan-sengupta/