Список – последовательность элементов, объединенных в один контейнер. Главная особенность – они изменяемы.
Элементы списка индексируются, состоят в основном из однотипных данных, перебираются, сохраняют порядок.
Для решения заданий необходимо повторить свойства и методы списков.
Задача 1. Базовый уровень
Условие
Дан произвольный список.
Представьте его в обратном порядке.
На практике применяется 2 способа:
1. На основании срезов (пройтись по всем элементам списка с шагом -1, т.е. в обратном порядке)
Пример – IDE
my_list = [2, 4, 8]
print(my_list[::-1])
Результат выполнения
[8, 4, 2]
2. При помощи метода списков reverse()Пример – IDE
my_list = [2, 4, 8]
my_list.reverse()
print(my_list)
Результат выполнения
[8, 4, 2]
В первом случае исходный список не меняется.
Задача 2. Базовый уровень
Условие
Напишите функцию change(lst), которая принимает список и меняет местами его первый и последний элемент.
В исходном списке минимум 2 элемента.
Рассмотрим 2 варианта решения.
Для первого способа понадобится воспользоваться методами pop() и insert().
Решение — IDE
def change(lst):
new_start = lst.pop() # Удаляем последний элемент и сохраняем его в переменную
new_end = lst.pop(0) # Удаляем первый элемент и сохраняем его в переменную
lst.append(new_end) # Добавляем к списку новый последний элемент
lst.insert(0, new_start) # Добавляем к списку новый первый элемент
return lst
# Тесты
print(change([1, 2, 3]))
print(change([1, 2, 3, 4, 5]))
print(change(['н', 'л', 'о', 'с']))
Результат выполнения
[3, 2, 1]
[5, 2, 3, 4, 1]
['с', 'л', 'о', 'н']
Второй способ занимает меньше кода, но не всегда очевиден.Решение — IDE
def change(lst):
lst[0], lst[-1] = lst[-1], lst[0]
return lst
# Тесты
print(change([1, 2, 3]))
print(change([1, 2, 3, 4, 5]))
print(change(['н', 'л', 'о', 'с']))
Результат выполнения
[3, 2, 1]
[5, 2, 3, 4, 1]
['с', 'л', 'о', 'н']
Задача 3. Базовый уровень
Условие
Функция to_list() принимает неограниченное количество параметров.
Обработайте их так, чтобы на выходе получить список из этих элементов.
Переменная args, обозначающая неограниченное количество неименованных параметров, представлена внутри любой функции в виде кортежа. Если применить к нему функцию list(), то получим требуемый список.Решение — Интерактивный режим
def to_list(*args):
return list(args)
# Тесты
print(to_list(1, 5, 77))
print(to_list('Молоко', 5, '2020 год'))
print(to_list([3, 4, 7], 8.3, True, 'Строка'))
Результат выполнения
[1, 5, 77]
['Молоко', 5, '2020 год']
[[3, 4, 7], 8.3, True, 'Строка']
Задача 4. Базовый уровень
Условие
Николай задумался о поиске «бесполезного» числа на основании списка.
Суть оного в следующем: он берет произвольный список чисел, находит самое большое из них, а затем делит его на длину списка.
Студент пока не придумал, где может пригодиться подобное значение, но ищет у вас помощи в реализации такой функции useless(s).
Решение — Интерактивный режим
def useless(lst):
return max(lst) / len(lst)
# Тесты
print(useless([1, 5, 77]))
print(useless([19, 8.3, -4, 11, 0, 5]))
print(useless([-33, -0.05, -4.18, 11.2, 13.12, 55, 7.1]))
Результат выполнения
25.666666666666668
3.1666666666666665
7.857142857142857
Задача 5. Базовый уровень
Условие
Требуется создать функцию list_sort(lst), которая сортирует список чисел по убыванию их абсолютного значения.
Для решения потребуется метод sort(), в который передается функция, определяющая абсолютное значение.Решение — IDE
def list_sort(lst):
lst.sort(key=lambda x: abs(x), reverse=True)
return lst
# Тесты
print(list_sort([1, 5, 77]))
print(list_sort([19, 8.3, -4, 11, 0, 5]))
print(list_sort([-33, -0.05, -4.18, 11.2, 13.12, 55, 7.1]))
Результат выполнения
[77, 5, 1]
[19, 11, 8.3, 5, -4, 0]
[55, -33, 13.12, 11.2, 7.1, -4.18, -0.05]
* Задача 6. Продвинутый уровень
Условие
На входе имеем список строк разной длины.
Необходимо написать функцию all_eq(lst), которая вернет новый список из строк одинаковой длины.
Длину итоговой строки определяем исходя из самой большой из них.
Если конкретная строка короче самой длинной, дополнить ее нижними подчеркиваниями с правого края до требуемого количества символов.
Расположение элементов начального списка не менять.
Сначала необходимо определить длину каждой строки в списке и найти максимальную. Далее дополняем символы «_» к строкам, чья длина меньше.Решение — IDE
def all_eq(lst):
max_item = max(lst, key=lambda x: len(x))
max_len = len(max_item)
return [item.ljust(max_len, '_') for item in lst]
# Тесты
print(all_eq(['крот', 'белка', 'выхухоль']))
print(all_eq(['a', 'aa', 'aaa', 'aaaa', 'aaaaa']))
print(all_eq(['qweasdqweas', 'q', 'rteww', 'ewqqqqq']))
Результат выполнения
['крот____', 'белка___', 'выхухоль']
['a____', 'aa___', 'aaa__', 'aaaa_', 'aaaaa']
['qweasdqweas', 'q__________', 'rteww______', 'ewqqqqq____']