ИПЗ по программированию помогите пожалуйста, если можно с объяснением
1. Анаграммы: Напишите функцию, которая принимает две строки и проверяет, являются ли они анаграммами друг друга. Функция должна возвращать True, если строки являются анаграммами, и False в противном случае. Строки считаются анаграммами, если одну строку можно переставить, чтобы получить другую. Все входные строки состоят только из строчных букв.
2. Сжатие строки: Напишите функцию, которая выполняет базовое сжатие строк с использованием подсчета повторяющихся символов. Например, строка aabcccccaaa превратится в a2b1c5a3. Если “сжатая” строка не становится короче исходной, функция должна вернуть исходную строку.
3. Наиболее часто встречающееся слово: Напишите функцию, которая принимает строку и возвращает наиболее часто встречающееся слово в строке. Если таких слов несколько, верните любое из них.
4. Пересечение списков: Напишите функцию, которая принимает два списка и возвращает список элементов, которые есть в обоих списках. Возвращаемый список должен содержать только уникальные элементы.
5. Перестановки строки: Напишите функцию, которая принимает строку и возвращает все возможные перестановки этой строки. Возвращаемый список должен содержать только уникальные строки.
6. Сортировка слов по длине: Напишите функцию, которая принимает строку, разбивает ее на слова и возвращает список слов, отсортированный по длине слов.
7. Объединение словарей с сохранением значений: Напишите функцию, которая принимает два словаря и объединяет их в один, сохраняя все значения для повторяющихся ключей в виде списка.
8. Поиск ключей по значению в словаре: Напишите функцию, которая принимает словарь и значение, и возвращает список всех ключей, которые имеют это значение.
9. Наибольшая подпоследовательность: Напишите функцию, которая принимает список чисел и возвращает наибольшую возрастающую подпоследовательность в этом списке.
10. Создание словаря из списка: Напишите функцию, которая принимает список и создает словарь, где ключи - это элементы списка, а значения - это количество раз, которое каждый элемент появляется в списке.
Сделал все, что не лень
#1
def is_anagram(a, b):
return sorted(a) == sorted(b)
#2
#лень, там долго
#3
def most_used_word(s):
s = s.split()
d = dict()
for x in s:
d[x] = d.get(x, 0) + 1
m = s[0]
mx = d[s[0]]
for k, v in d.items():
if v > mx:
m = k
mx = v
return m
#4
def intersect_lists(a, b):
a = set(a)
b = set(a)
c = list(a & b)
return c
#5
#тоже лень
#6
def sorter(s):
a = s.split()
a = sorted(a, key = lambda x: len(x))
return a
#7
def union_dicts(a, b):
for k, v in b.items():
if k in a.keys():
a[k] = [a[k], v]
else:
a[k] = v
return a
#8
def finder(a, v):
q = list()
for k in a.keys():
if a[k] == v:
q.append(k)
return q
#9
#лень
#10
def list_to_dict(a):
d = dict()
for x in a:
d[x] = d.get(x, 0) + 1
return d