Python Portal
55.2K subscribers
2.48K photos
404 videos
51 files
1.02K links
Всё самое интересное из мира Python

Связь: @devmangx

РКН: https://clck.ru/3GMMF6
Download Telegram
Немного базы Python: print по горизонтали

Когда вы проходите циклом по итерируемому объекту, функция print печатает каждый элемент с новой строки. Это потому, что у print есть параметр end. По умолчанию значение этого параметра содержит символ перевода строки (end="\n"). Чтобы печатать в одну строку, нужно убрать перевод строки и заменить его на пустую строку (end="").

В примере ниже обратите внимание на пробел между кавычками (" "): он нужен, чтобы числа печатались с пробелами между ними. Если убрать пробел (""), числа выведутся слитно, вот так: 1367. Вот код, который это показывает:

In [1]: my_list = [1, 3, 6, 7]

for number in my_list:
print(number, end=" ")

// 1 3 6 7


У print есть еще один параметр: sep. Мы используем sep, чтобы задать, чем разделять выводимые значения. Ниже в качестве разделителя используется символ /:

In [2]: print('12', '12', '1990', sep='/')

// 12/12/1990


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2711🤯3🔥1
Немного базы Python. День 2: cлияние словарей

Если у тебя есть два словаря, которые нужно объединить, это можно сделать двумя простыми способами. Можно использовать оператор merge (|) или оператор (**). Ниже у нас есть два словаря: first_dict и second_dict. Мы будем использовать эти два метода, чтобы объединить словари. Вот код:

1️⃣ Использование оператора merge (|)

first_dict = {"kelly": 23,
"Derick": 14, "John": 7}
second_dict = {"Ravi": 45, "Mpho": 67}

combined_dict = first_dict | second_dict
print(combined_dict)


Вывод:

{'kelly': 23, 'Derick': 14, 'John': 7, 'Ravi': 45, 'Mpho': 67}


2️⃣Метод 2: использование оператора merge (**)

С этим оператором нужно поместить словари внутрь фигурных скобок. В коде ниже мы “подставляем” два словаря для объединения с помощью двух операторов *. Оба словаря заключены в фигурные скобки и разделены запятой.

first_dict = {"kelly": 23,
"Derick": 14, "John": 7}
second_dict = {"Ravi": 45, "Mpho": 67}

combined_dict = {**first_dict, **second_dict}
print(combined_dict)


Вывод:

{'kelly': 23, 'Derick': 14, 'John': 7, 'Ravi': 45, 'Mpho': 67}


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
36👍10🔥3🤝1
Немного базы. День 3: Календарь в Python

В Python есть встроенный модуль calendar. Мы можем импортировать этот модуль, чтобы вывести календарь. С календарём можно делать много разных вещей.

Допустим, мы хотим посмотреть апрель 2022 года. Мы используем класс month из модуля calendar и передадим год и месяц в качестве аргументов. См. ниже:

import calendar

month = calendar.month(2022, 4)
print(month)


Есть ещё много всего, что можно сделать с calendar. Например, с его помощью можно проверить, является ли заданный год високосным или нет. Давай проверим, високосный ли 2022 год.

import calendar

month = calendar.isleap(2022)
print(month)


False


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
27👍14
Немного базы Python. День 4: Получение текущего времени и даты

Ниже приведенный код показывает, как можно получить текущее время с помощью модуля datetime. Метод now() возвращает объект datetime, представляющий текущие дату и время в соответствии с системными часами. Метод strftime() форматирует время для нужного вывода. Этот код показывает, как использовать модуль datetime вместе с методом strftime(), чтобы получить отформатированную строку времени в формате часов, минут и секунд.

from datetime import datetime

time_now = datetime.now().strftime('%H:%M:%S')
print(f'Текущее время: {time_now}')


Текущее время: 17:37:28


Что, если мы хотим вернуть сегодняшнюю дату? Мы можем использовать date из модуля datetime. Ниже используется метод today():

from datetime import date

today_date = date.today()
print(today_date)


2023-09-20


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1911🔥4
Немного базы Python. День 5. Сортировка списка по убыванию

Метод sort() сортирует список по возрастанию (по умолчанию).

Чтобы sort() работал, элементы списка должны быть одного типа. Нельзя сортировать список со смешанными типами данных, например числа и строки.

У метода sort() есть параметр reverse; чтобы отсортировать список по убыванию, установите reverse=True.

list1 = [2, 5, 6, 8, 1, 8, 9, 11]

list1.sort(reverse=True)
print(list1)

# [11, 9, 8, 8, 6, 5, 2, 1]


Помните: sort() это строго метод списка (list). Его нельзя использовать для сортировки set, tuple, string или dictionary.

Метод sort() не возвращает новый список; он сортирует существующий список на месте (in place).

Если вы попробуете создать новый объект с помощью sort(), он вернет None. Пример ниже:

list1 = [2, 5, 6, 8, 1, 8, 9, 11]
list2 = list1.sort(reverse=True)
print(list2)

# None


У метода sort() есть необязательный параметр key, который позволяет настроить поведение сортировки.

Этот параметр используется для передачи функции, которая задает критерий сортировки элементов списка.

В примере ниже у нас список кортежей, и мы хотим отсортировать его по возрасту студента. Используя параметр key вместе с lambda-функцией, можно реализовать такую кастомную сортировку. См. ниже:

students = [
("Alice", 22),
("Bob", 20),
("Charlie", 24)
]

# Сортируем студентов по возрасту, используя lambda-функцию как key
students.sort(key=lambda students: students[1])
print(students)

# [('Bob', 20), ('Alice', 22), ('Charlie', 24)]


Метод sort() является стабильным (stable), то есть сохраняет относительный порядок равных элементов в отсортированном списке.

Если у двух элементов одинаковый ключ сортировки, их исходный порядок сохраняется. Например, если у "Alice" и "Bob" одинаковый возраст, их порядок останется прежним. Это и называется стабильной сортировкой (stable sorting). См. пример:

students = [
("Alice", 22),
("Bob", 22),
("Charlie", 24)
]

# Сортируем студентов по возрасту, используя lambda-функцию как key
students.sort(key=lambda students: students[1])
print(students)

# [('Alice', 22), ('Bob', 22), ('Charlie', 24)]


Как видно, порядок элементов "Alice" и "Bob" не изменился, потому что у них одинаковый возраст.

👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍11
Немного базы Python. День 6 - Обмен значениями переменных

В Python можно менять местами переменные после того, как им уже присвоены объекты. Ниже мы сначала присваиваем 20 переменной x и 30 переменной y, а потом меняем их местами: x становится 30, а y становится 20. Этот способ называется упаковкой и распаковкой кортежа (tuple packing/unpacking).

x, y = 20, 30
x, y = y, x

print('x is: ', x)
print('y is: ', y)


x is 30
y is 20


Также можно использовать оператор XOR (exclusive or), чтобы поменять переменные местами. Это трехшаговый метод. В примере ниже мы меняем местами значения x и y.

x = 20
y = 30

# шаг первый
x ^= y
# шаг второй
y ^= x
# шаг третий
x ^= y

print(f'x is: {x}')
print(f'y is: {y}')


x is: 30
y is: 20


Также можно использовать арифметические операции (сложение и вычитание), чтобы поменять переменные местами без временной переменной. Однако этот метод рекомендуется для обмена переменных числовых типов данных. Вот пример:

# Используем арифметические операции
x = 5
y = 10

x = x + y
y = x - y
x = x - y

print("After swapping:")
print("x =", x)
print("y =", y)


After swapping:
x = 10
y = 5


В результате этих арифметических операций значения x и y были фактически поменяны местами. После обмена x содержит исходное значение y (10), а y содержит исходное значение x (5).

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

👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍185🤔4
Немного базы Python. День 7. Подсчет количества вхождений элемента

Если тебе нужно узнать, сколько раз элемент встречается в итерируемой коллекции, можно использовать класс Counter из модуля collections. Counter() вернет словарь с тем, сколько раз каждый элемент встречается в последовательности. Допустим, мы хотим узнать, сколько раз имя Peter встречается в следующем списке. Можно использовать Counter(). См. ниже:

from collections import Counter

list1 = ['John', 'Kelly', 'Peter', 'Moses', 'Peter']

count_peter = Counter(list1).get("Peter")

print(f'The name "Peter" appears in the list '
f'{count_peter} times.')


Вывод:

The name "Peter" appears in the list 2 times.


Еще один способ сделать это — обычный цикл for. Мы заводим переменную-счетчик и увеличиваем ее на 1 каждый раз, когда находим имя Peter в последовательности. Это наивный способ. См. ниже:

list1 = ['John', 'Kelly', 'Peter', 'Moses', 'Peter']
# Create a count variable
count = 0
for name in list1:
if name == 'Peter':
count +=1
print(f'The name "Peter" appears in the list'
f' {count} times.')


Вывод:

The name "Peter" appears in the list 2 times.


Списки и другие итерируемые структуры данных в Python имеют встроенный метод count(), который позволяет посчитать количество вхождений конкретного элемента. Мы можем использовать count(), чтобы посчитать, сколько раз Peter встречается в списке.

list1 = ['John', 'Kelly', 'Peter', 'Moses', 'Peter']

print(f'The name "Peter" appears in the list '
f'{list1.count("Peter")} times.')


Вывод:

The name "Peter" appears in the list 2 times.


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍7🔥5👀2
Немного базы Python. День 8 - Сделать вложенный список плоским

Я покажу вам три (3) способа, как можно развернуть двумерный список. В первом методе используется цикл for, во втором используется модуль itertools, а в третьем используется списковое включение (list comprehension).

⚙️ С помощью цикла for:

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

# In [19]:
list1 = [[1, 2, 3],[4, 5, 6]]

newlist = []
for list2 in list1:
for j in list2:
newlist.append(j)

print(newlist)


[1, 2, 3, 4, 5, 6]


⚙️ С помощью модуля itertools:

Функцию itertools.chain.from_iterable() из модуля itertools можно использовать, чтобы развернуть вложенный список. Этот метод может не подойти для списков с глубокой вложенностью.

# In [20]:
import itertools

list1 = [[1, 2, 3],[4, 5, 6]]

flat_list = list(itertools.chain.from_iterable(list1))
print(flat_list)


[1, 2, 3, 4, 5, 6]


Вы можете увидеть, что вложенный цикл был развернут.

⚙️ С помощью list comprehension

Если вы не хотите импортировать itertools или писать обычный цикл for, можно просто использовать list comprehension.

# In [21]:
list1 = [[1, 2, 3], [4, 5, 6]]

flat_list = [i for j in list1 for i in j]
print(flat_list)


[1, 2, 3, 4, 5, 6]


List comprehension хорошо подходит для умеренно вложенных списков. Для глубоко вложенных списков он не подходит, так как код становится хуже читаемым.

⚙️ С помощью генераторной функции

Можно создать генераторную функцию, которая делает yield элементов из вложенного списка, а затем преобразовать генератор в список.

# In [22]:
def flatten_generator(nested_list):
for sublist in nested_list:
for item in sublist:
yield item

list1 = [[1, 2, 3], [4, 5, 6]]

flat_list = list(flatten_generator(list1))
flat_list


Out[22]: [1, 2, 3, 4, 5, 6]


Метод с генератором подходит для разворачивания больших или глубоко вложенных списков. Это потому, что генераторы экономно расходуют память.

👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍9
Немного базы Python. День 9. Индекс наибольшего числа

Есть несколько способов найти индекс самого большого числа в списках.

▪️Функция max() и метод index()

Можно использовать метод index() вместе с функцией max(), чтобы получить индекс наибольшего числа в списке. В этом примере мы с помощью max() находим самое большое число в списке и передаем его в index() как аргумент. Метод index() вернет индекс первого вхождения наибольшего числа.

In [23]: my_list = [12, 45, 67, 89, 34, 67, 13]
largest_number_index = my_list.index(max(my_list))
largest_number_index

Out[23]: 3


▪️max() и enumerate()

В коде ниже функция max() принимает список и lambda-функцию в качестве аргументов. Мы добавляем enumerate() к списку, чтобы она могла вернуть и число из списка, и его индекс (кортеж). Параметр start в enumerate() задаем так, чтобы нумерация начиналась с позиции 0. lambda-функция используется, чтобы найти максимальное значение по второму элементу каждого кортежа, то есть по значению из my_list.

In [24]: my_list = [12, 45, 67, 89, 34, 67, 13]

max_num = max(enumerate(my_list, start=0),
key = lambda x: x[1])
print('Индекс наибольшего числа:',
max_num[0])

Индекс наибольшего числа: 3


▪️Списковое включение с функцией enumerate()

В коде ниже мы используем списковое включение вместе с enumerate(), чтобы найти индекс самого большого числа в списке. Создаем переменную max_value - в ней хранится максимальное значение из списка. Дальше с помощью enumerate() находим индекс(ы), где значение совпадает с этим максимумом.

In [25]: my_list = [12, 45, 67, 89, 34, 67, 13]

max_value = max(my_list)
max_indices = [idx for idx, val in enumerate(my_list) if val == max_value]
max_indices

Out[25]: [3]


Вывод показывает, что самое большое число находится по индексу 3.

👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍7😁2
Немного базы Python. День 10 - Абсолютное значение (модуль) числа

Допустим, у тебя есть отрицательное число и ты хочешь получить его абсолютное значение. Для этого можно использовать функцию abs(). Функция abs() возвращает абсолютное значение любого числа (положительного, отрицательного и комплексного). Ниже показано, как получить список абсолютных значений из списка, где есть и отрицательные, и положительные числа. Используем list comprehension.

list1 = [-12, -45, -67, -89, 34, 67, -13]

print([abs(num) for num in list1])


[12, 45, 67, 89, 34, 67, 13]


Также abs() можно применять к числу с плавающей точкой, и она вернет абсолютное значение. Смотри ниже:

num = -23.12

print(abs(num))


23.12


➡️Использование модуля math

Если тебе нужны более продвинутые математические функции, можно использовать fabs() из модуля math. Эта функция всегда возвращает float.

import math

num = -23.12
absolute_value = math.fabs(num)
absolute_value


23.12


➡️Использование lambda-функции

Можно также использовать lambda, чтобы превратить отрицательное число в модуль. Код ниже проверяет, меньше ли x нуля (то есть отрицательное ли значение). Если да, возвращает -x, по сути убирая минус и делая число положительным. Если x не отрицательное (больше или равно 0), возвращает x как есть.

num = -23.12
absolute_value = (lambda x: -x if x < 0 else x)(num)
absolute_value


23.12


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3
Немного базы Python. День 11 - Добавление разделителя тысяч

Если вы работаете с большими числами и хотите добавить разделитель, чтобы их было проще читать, есть несколько способов это сделать. Вот некоторые из них:

▪️Использование функции format

List comprehension проходит по каждому элементу (числу) в my_list. Для каждого числа он форматирует его в строку с разделителями тысяч запятыми, используя строку формата '{:,}'.format(num).

my_list = [10898767, 9876780, 9908763]

new_list = ['{:,}'.format(num) for num in my_list]
print(new_list)

# ['10,898,767', '9,876,780', '9,908,763']


Вывод печатает new_list, который содержит отформатированные строки с разделителями запятыми.

▪️Использование f-строк

Также можно использовать f-строки, чтобы добавить разделители тысяч. Обратите внимание ниже: вместо запятой (,) как разделителя мы используем подчёркивание (_).

my_list = [10898767, 9876780, 9908763]

new_list = [f"{num:_}" for num in my_list]
print(new_list)

# ['10_898_767', '9_876_780', '9_908_763']


Заметили, что в обоих случаях мы используем list comprehension, чтобы добавить разделитель? Крутая штука, правда? 😉

▪️Использование модуля locale

Модуль locale даёт способ форматировать числа с разделителями тысяч в соответствии с текущими настройками локали. Вы можете выставить нужную локаль и использовать метод locale.format_string(). Вот как это выглядит на практике:

import locale

my_list = [10898767, 9876780, 9908763]
formatted_list = []

for num in my_list:
# Set the locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
formatted_list.append(locale.format_string("%d", num, grouping=True))

print(formatted_list)


Этот код проходит по каждому числу в my_list через цикл for. Он задаёт нужную локаль 'en_US.UTF-8' с помощью locale.setlocale(locale.LC_ALL, 'en_US.UTF-8'). Это выставляет локаль на США с кодировкой UTF-8, где для тысяч используются запятые. Дальше locale.format_string('%d', num, grouping=True) форматирует число (num) в строку с разделителями тысяч. Спецификатор формата '%d' означает, что число нужно форматировать как целое, а grouping=True указывает, что разделители тысяч должны быть включены.

👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍8
Немного базы Python. # 12 - Startswith и Endswith

startswith() и endswith() это строковые методы, которые возвращают True, если строка начинается или заканчивается указанным значением. Эти методы можно использовать в разных ситуациях, когда нужно проверить префикс или суффикс у строки. Они особенно полезны для фильтрации и задач валидации.

- Использование метода Startswith

Допустим, ты хочешь получить все имена в списке, которые начинаются на a. Вот как можно использовать startswith() для этого:

list1 = ['lemon', 'Orange',
'apple', 'apricot']

new_list = [fruit for fruit in list1 if fruit.startswith('a')]
print(new_list)


['apple', 'apricot']


- Использование метода Endswith

Метод endswith() можно использовать для валидации ввода пользователя. Например, если нужно проверить, что пользователь ввёл корректный Gmail-адрес, можно убедиться, что ввод заканчивается на gmail.com:

user_input = input("Введите email-адрес: ")

if user_input.endswith("@gmail.com"):
print("Валидный email-адрес.")
else:
print("Невалидный email-адрес.")


👉 @PythonPortal #100daysofpython
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5🤔3🌭1