Генераторы списков (
list comprehensions
) в Python — это мощный инструмент, который позволяет создавать списки компактным и элегантным способом. В данной статье рассмотрим несколько практических примеров их использования на экзаменах ЕГЭ по информатике.Начнем с простого примера, где мы создадим список из 10 случайных чисел:
from random import randint
# Старый способ создания списка
M = []
for i in range(10):
M.append(randint(0, 100))
# Способ создания списка через генератор:
M = [randint(0, 100) for i in range(10)]
В этом примере мы видим, как генераторы списков позволяют сократить количество строк кода и сделать его более читаемым.
Следующий пример продемонстрирует, как с помощью генераторов списков можно фильтровать элементы:
# Все четные элементы
chet = [x for x in M if x % 2 == 0]
# Все нечетные элементы
nechet = [x for x in M if x % 2 != 0]
Такой подход позволяет быстро создавать новые списки на основе условий, что делает код более лаконичным.
С помощью генераторов списков можно также находить элементы, которые имеют копии:
# Элементы, которые имеют копии
copied = [x for x in M if M.count(x) > 1]
# Элементы, которые не имеют копий
not_copied = [x for x in M if M.count(x) == 1]
Самый простой пример использования генераторов списков это создание последовательностей чисел:
M = [x for x in range(10)]
print(M) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
M = [x ** 2 for x in range(10)]
print(M) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
M = [x ** 2 for x in range(10) if x % 2 == 0]
print(M) # [0, 4, 16, 36, 64]
Генераторы списков могут также упрощать загрузку и обработку данных из файлов:
M = [int(x) for x in open('17.txt')]
# Находим трехзначные числа с последней цифрой 3
D = [x for x in M if abs(x) % 10 == 3 and len(str(abs(x))) == 3]
Можно использовать генераторы для обработки строк, прочитанных из файла:
for s in open('9.txt'):
M = [int(x) for x in s.split()]
Программирование на Python | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4🔥3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Уровень: Базовый
Напишите программу, которая находит все уникальные элементы в списке целых чисел, то есть те элементы, которые встречаются в списке только один раз.
На вход программе подается натуральное число n, а затем n целых чисел.
Программа должна вывести все уникальные элементы, каждый на отдельной строке. Если таких элементов нет, выведите "Уникальных элементов нет".
Sample Input:
5
3
3
2
1
4
Sample Output:
2
1
4
n = int(input())
M = [int(input()) for _ in range(n)]
R = [x for x in M if M.count(x) == 1]
if not R:
print("Уникальных элементов нет")
else:
print(*R, sep='\n')
n = int(input())
Считываем с ввода количество чисел, которое пользователь хочет ввести, и преобразуем его в целое число.
M = [int(input()) for _ in range(n)]
Создаем список M, считывая n целых чисел с ввода в цикле, используя списковое выражение.
R = [x for x in M if M.count(x) == 1]
Создаем список R, содержащий только те элементы из M, которые встречаются в списке единожды (то есть уникальные).
if not R:
Проверяем, пустой ли список R (то есть есть ли уникальные элементы).
print("Уникальных элементов нет")
Если список R пуст, выводим сообщение о том, что уникальных элементов нет.
else:
В противном случае, если уникальные элементы присутствуют.
print(*R, sep='\n')
Выводим все уникальные элементы из R, разделяя их символом новой строки.
Делитесь своим вариантами решения в комментариях
Информатика ЕГЭ | itpy
Программирование на Python | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤🔥2👍1
Это строка, содержащая числовые символы, из которых мы будем находить сумму:
s = '12345'
summa1 = 0
for x in s:
summa1 += int(x)
print(summa1) # 15
В этом варианте мы используем цикл
for
, чтобы пройти по каждому символу строки s
. Каждый символ преобразуем в число с помощью int(x)
и добавляем его к общей сумме summa1
.summa2 = 0
for i in range(0, 10):
summa2 += s.count(str(i)) * i
print(summa2) # 15
Здесь мы использовали метод
count
для подсчета количества вхождений каждой цифры от 0 до 9 в строке s
. Умножаем количество вхождений на само число и добавляем к summa2
.summa3 = sum(map(int, s))
print(summa3) # 15
Этот способ применяет функцию map, чтобы преобразовать каждый символ строки s в число. Используя sum, мы находим сумму всех чисел. Это краткий и эффективный способ.
summa4 = sum([int(x) for x in s])
print(summa4) # 15
Здесь используется генератор списка для создания нового списка, где каждый элемент — это числовое значение символа из
s
. Затем с помощью sum
находим сумму элементов списка.Альтернативно, в этой версии можно добавить проверку
if
, чтобы убедиться, что символы являются цифрами:summa4 = sum([int(x) for x in s if x.isdigit()])
Это делает код более безопасным на случай, если в строке
s
присутствуют нечисловые символы.Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🥰2❤🔥1
Метод
.append()
используется для добавления элемента в конец списка. Пример: my_list = [1, 2, 3]
my_list.append(4)
my_list.append(5)
print(my_list) # Вывод: [1, 2, 3, 4, 5]
Можно реализовать через конкатенацию (склеивание) списков:
my_list = [1, 2, 3]
my_list = [0] + my_list + [4, 5]
print(my_list) # Вывод: [0, 1, 2, 3, 4, 5]
Метод
.reverse()
изменяет порядок элементов в списке на обратный. Пример: my_list = [1, 2, 3, 4]
my_list.reverse()
print(my_list) # Вывод: [4, 3, 2, 1]
Можно записать по другому через срез:
my_list = [1, 2, 3, 4]
my_list = my_list[::-1]
print(my_list) # Вывод: [4, 3, 2, 1]
Метод
.count()
возвращает количество вхождений заданного элемента в список. Пример:my_list = [1, 2, 2, 3, 4, 2]
print(my_list.count(2)) # Вывод: 3
Метод .
remove()
удаляет первое вхождение указанного элемента из списка. Пример:my_list = [1, 2, 3, 2, 4]
my_list.remove(2) # Первая найденная двойка
print(my_list) # Вывод: [1, 3, 2, 4]
Можно удалить элемент через его индекс используя
del
:my_list = [1, 2, 3, 2, 4]
del my_list[1] # Индекс удаляемого элемента
print(my_list) # Вывод: [1, 3, 2, 4]
Метод
.index()
возвращает индекс первого вхождения заданного элемента в списке. Пример:my_list = [1, 2, 3, 2, 4]
print(my_list.index(2)) # Вывод: 1
Метод
.sort()
сортирует элементы списка по возрастанию (по умолчанию) или в обратном порядке, если передан аргумент reverse=True
. Пример:my_list = [4, 1, 3, 2]
my_list.sort()
print(my_list) # Вывод: [1, 2, 3, 4]
my_list.sort(reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Скажу честно я не любитель этого метода, считаю, что удобнее будет использовать функцию
sorted()
:my_list = [4, 1, 3, 2]
my_list = sorted(my_list)
print(my_list) # Вывод: [1, 2, 3, 4]
my_list = sorted(my_list, reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Программирование на Python | itpy
Наш второй канал по подготовке к ЕГЭ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5❤3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Яндекс учебник
Уровень: Средний
Существуют числа, обладающие свойствами:
1. Число делится на все свои цифры;
2. Число, полученное из данного числа записью цифр в обратном порядке, тоже делится на все свои цифры.
Примером такого числа является 216. Сколько существует трёхзначных чисел, без нулей в записи, обладающих этими свойствами?
Считаю такую задачу весьма интересной для практики программирования, да тут нет ничего похожего с задачами ФИПИ, но практика дает нам много ценного опыта.
cnt = 0
for n in range(100, 1000):
# if str(n).count('0') == 0:
if '0' not in str(n):
if all(n % int(x) == 0 for x in str(n)):
new_n = int(str(n)[::-1])
if all(new_n % int(x) == 0 for x in str(new_n)):
cnt += 1
print(cnt)
# Ответ: 16
cnt = 0
- Инициализируется переменная cnt для подсчета количества чисел, удовлетворяющих условиям задачи.
for n in range(100, 1000):
- Цикл for перебирает все трехзначные числа от 100 до 999 включительно.
# if str(n).count('0') == 0:
- Закомментированная строка изначально проверяла, что в числе n нет нулей (аналог).
if '0' not in str(n):
- Проверяется, что число n не содержит цифру '0'.
if all(n % int(x) == 0 for x in str(n)):
- Проверяется, что число n делится на каждую из своих цифр без остатка.
new_n = int(str(n)[::-1])
- Переменная new_n получает значение числа n с цифрами в обратном порядке.
if all(new_n % int(x) == 0 for x in str(new_n)):
- Проверяется, что число new_n также делится на каждую из своих цифр без остатка.
cnt += 1
- Увеличивается счетчик cnt на 1, если оба условия делимости выполняются.
print(cnt)
- Выводится общее количество чисел, удовлетворяющих всем условиям.
Программирование на Python | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤🔥2👍1
- В Python можно использовать функцию bin(), чтобы получить двоичное представление числа.
- Например, bin(125) возвращает строку '0b1111101', где префикс 0b указывает на двоичную систему.
- Чтобы избавиться от префикса, используйте срез: bin(125)[2:], что даст '1111101'.
- Также можно использовать форматирование строк: f'{125:b}', что также выдаст '1111101'.
- Для обратного преобразования строки в число используйте int('1111101', 2), получив исходное 125.
n = 125
print(bin(n)) # 0b1111101
print(f'{n:b}') # 1111101
print(bin(n)[2:]) # 1111101
print(int('1111101', 2)) # 125
- Используйте функцию oct(), чтобы получить восьмеричное представление.
- oct(125) возвращает '0o175', где 0o обозначает восьмеричную систему.
- Чтобы убрать префикс, используйте срез: oct(125)[2:] даст '175', или форматирование: f'{125:o}', что тоже даст '175'.
- Обратно можно преобразовать с помощью int('175', 8), снова получая 125.
n = 125
print(oct(n)) # 0o175
print(f'{n:o}') # 175
print(oct(n)[2:]) # 175
print(int('175', 8)) # 125
- Преобразуйте число в шестнадцатеричное, используя hex().
- hex(125) возвращает '0x7d', где 0x указывает на шестнадцатеричную систему.
- Удалите префикс срезом: hex(125)[2:] даст '7d'.
- Используйте f'{125:x}' для малого регистра или f'{125:X}' для большого регистра, чтобы получить '7d' или '7D' соответственно.
- Преобразуйте обратно с помощью int('7d', 16), получив 125.
n = 125
print(hex(n)) # 0x7d
print(f'{n:x}') # 7d
print(f'{n:X}') # 7D
print(hex(n)[2:]) # 7d
print(int('7d', 16)) # 125
Не забудь поделиться этой шпаргалкой с друзьями
Программирование на Python | itpy
Наш второй канал по подготовке к ЕГЭ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤🔥2👍1
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[2:5]
print(subset) # Вывод: [3, 4, 5]
Здесь мы извлекаем подсписок, начиная с индекса 2 и заканчивая индексом 5 (не включая). Это полезно, когда нам нужна определенная часть списка.
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[1::2]
print(subset) # Вывод: [2, 4, 6, 8, 10]
В этом примере мы извлекаем каждый второй элемент, начиная с индекса 1, то есть все нечетные ИНДЕКСЫ.
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
reverse_list = my_list[::-1]
print(reverse_list) # Вывод: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Использование среза с отрицательным шагом позволяет нам легко создать список в обратном порядке.
my_string = "Hello, World!"
substring = my_string[7:12]
print(substring) # Вывод: "World"
В данном случае, мы извлекаем подстроку, начиная с индекса 7 и заканчивая индексом 12 (не включая). Это полезно для работы с текстовыми данными.
my_string = "Hello, World!"
substring = my_string[::2]
print(substring) # Вывод: "Hlo ol!"
Использование среза с шагом 2 помогает нам извлекать каждый второй символ из строки.
my_string = "Hello, World!"
reverse_string = my_string[::-1]
print(reverse_string) # Вывод: "!dlroW ,olleH"
Также, как и в случае с списками, срез с отрицательным шагом позволяет легко получить строку в обратном порядке.
Использование срезов делает код более эффективным и читаемым. Практикуйтесь в их применении, и вы обнаружите, насколько они улучшают ваши навыки работы с данными в Python.
Программирование на Python | itpy
Наш второй канал по подготовке к ЕГЭ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4🥰3👾3
This media is not supported in your browser
VIEW IN TELEGRAM
При подготовке к ЕГЭ по информатике важно уметь работать с различными системами счисления для таких номеров как 5 и 14. Сегодня разберем универсальную функцию на Python, которая позволяет перевести число из десятичной системы счисления в любую другую (от 2 до 36).
1. Импортируем необходимые символы:
from string import *
Здесь используются модули digits и ascii_uppercase, чтобы задать доступные символы для различных систем счисления.
2. Образуем строку alphabet:
alphabet = digits + ascii_uppercase
Эта строка содержит все символы, используемые в системах счисления: цифры от 0 до 9 и заглавные английские буквы от A до Z.
3. Основная функция convert:
def convert(n, b):
r = ''
while n > 0:
r += alphabet[n % b]
n //= b
return r[::-1]
Функция convert принимает два параметра: число n в десятичной системе и основание b, в которое его нужно перевести. Внутри цикла проводится деление числа n на основание b с остатком, который используется для получения соответствующего символа из alphabet. Собранные символы переворачиваются в обратном порядке для получения правильного представления числа в новой системе.
4. Примеры использования:
n = 15552
print(convert(n, 2)) # Перевод в двоичную систему
print(convert(n, 8)) # Перевод в восьмеричную систему
print(convert(n, 16)) # Перевод в шестнадцатеричную систему
print(convert(n, 3)) # Перевод в троичную систему
Эти примеры показывают, как использовать функцию для перевода числа 15552 в различные системы счисления.
Более короткий вариант написания этой функции оставлю в комментариях к этому посту, не стесняйтесь ставить реакции на этот пост
Информатика ЕГЭ | itpy
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥3👍2👨💻1
Почему метод
list.sort()
в Python возвращает значение None
вместо отсортированного списка? Ответ:
Если вам необходим новый отсортированный список, рекомендуется использовать функцию sorted(). Она возвращает отсортированный список, не изменяя оригинал.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👏3❤🔥2🔥1
Регулярные выражения — мощный инструмент для поиска и анализа текстовых данных. В заданиях ЕГЭ по информатике (задание 24) они часто используются для поиска числовых последовательностей по определённому шаблону. Разберём основные приёмы на примерах из реальных задач.
Общая структура большинство решений строится по следующему шаблону:
from re import *
s = open('24.txt').readline()
# num — шаблон отдельного числа
# reg — шаблон всей последовательности
reg = rf'{num}([+*]{num})*'
matches = [x.group() for x in finditer(reg, s)]
maxi = max(len(x) for x in matches)
print(maxi)
Пример 1: Поиск последовательностей чисел от 7, 8, 9, 0 (№ 20813 #kege)
num = r'([789][0789]*|[0])'
reg = rf'{num}([-*]{num})*'
Пример 2: Работа с буквами и диапазоном 1–6 (№ 18619 #kege)
s = s.replace('A', ' ').replace('C', ' ').replace('D', ' ')
num1 = r'[B]([1-6][1-6]*)'
num2 = r'([1-6][1-6]*)'
reg = rf'{num1}([-*]{num2})*'
Пример 3: Подсчёт количества чисел (№ 18285 #kege)
num = r'([1-9][0-9]*)'
reg = rf'{num}([+*]{num})*'
Пример 4: Сумма выражений (№ 18147 #kege)
num = r'([789]+)'
reg = rf'{num}([+]{num})+'
Определение чисел:
r'([1-9][0-9]*)' - натуральные числа (без ведущих нулей)
r'([0-9]+)' - любые целые числа
r'([789][0789]*)' - числа, начинающиеся с 7,8 или 9
Операции между числами:
([+*]{num})* - повторяющиеся операции + или *
([-+*]{num})* - операции -, + или *
Специальные условия:
Окончание на определенные цифры: [05]
Начало с определенных букв: [AFD]
Регулярные выражения - это мощный инструмент, который требует практики. Разбирая подобные задачи, вы лучше поймете их синтаксис и возможности.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥3👍2🔥1
all()
и any()
в Python: просто о полезном #tpyВ задачах ЕГЭ (например, в номере 25) часто нужно проверять условия для всех или хотя бы одного элемента из набора. Python предлагает элегантные решения — встроенные функции
all()
и any()
.all()
— Проверка простого числаdef is_prime(x):
if x <= 1:
return False
return all(x % i != 0 for i in range(2, x))
print(is_prime(7)) # Вывод: True
(x % i != 0 for i in range(2, x))
создает последовательность логических значений: True
, если x
не делится на i
, и False
, если делится.all()
возвращает True
, только если все значения в последовательности — истинны.is_prime(7)
вернет True
, так как 7 не делится ни на одно число от 2 до 6 — то есть, это простое число.any()
— Поиск хотя бы одного делителяdef has_divisor(x):
return any(x % i == 0 for i in range(2, x))
print(has_divisor(9)) # Вывод: True
any()
вернет True
, если хотя бы одно значение в последовательности — истина.has_divisor(9)
возвращает True, потому что 9 делится на 3.💡 Кратко:
all()
— возвращает True, если все элементы истинны.any()
— возвращает True, если хотя бы один элемент истинен.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2❤🔥2👍2🔥2
Давненько не было викторин!
Что выведет этот код?
Что выведет этот код?
Anonymous Quiz
7%
['B', 'C', 'D', 'A']
36%
['A', 'B', 'C', 'D']
49%
['A', 'BCD']
7%
['BCD', 'A']
🙏6❤3🔥3🤩2
Пару слов об авторе канала, давайте знакомиться!
Информатика ЕГЭ | itpy
Программирование на Python | itpy
Информатика ОГЭ | itpy
Hey Student!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3🎉2🫡2