2022-02-04 20:10:00
Решаем задачу на Python тремя способами: от Junior до Senior
Формулировка задачи
Дан список arr с произвольным количеством элементов. Необходимо написать функцию tuple_creator, которая вернет список кортежей, каждый из которых будет содержать порядковый номер и элемент списка arr. При этом нумерацию нужно начинать не с нуля, а с некоторого заданного числа n.
Пример:
Дано:
arr = ['aaa', 125, 'bbb'],
n = 3
Результат:
[(3,'aaa'),(4,125),(5,'bbb')]
Попробуйте решить задачу до того, как посмотрите наши варианты решения Ссылка на задачу https://vk.cc/caNCl1
Вариант 1: Junior
Самый простой вариант решения задачи:
1. Найти длину исходного массива
2. В цикле for получить индексы каждого элемента
3. Добавить к результату кортеж из индекса и соответствующего элемента
class Answer:
def tuple_creator(self, arr, n):
# создаем пустой
список для записи
результата
res = []
# вычисляем длину
массива
l = len(arr)
# проходимся по всем
элементам массива
for i in range(l):
# добавляем к
результату
кортеж
(индекс,
значение)
res.append((i+n, arr[i]))
return res
Минусы такого решения:
- Нахождение длины массива - лишняя операция
- Конструкция range(len(l)) - плохой стиль
- Получение элементов через arri - зачастую плохой стиль
Вариант 2: Middle
Если вспомнить про существование функции enumerate, то можно существенно «облагородить» код.
class Answer:
def tuple_creator(self, arr, n):
# создаем пустой
список для записи
результата
res = []
# проходимся по всем
элементам массива
enumerate также
вычисляет индекс
for i, el in enumerate(arr):
# добавляем к
результату
кортеж (индекс,
значение)
res.append((i+n, el))
return res
Минусы такого решения:
- Все еще присутствует цикл for
- Кусок кода с append напрашивается на оптимизацию :)
- В начале мы создаем пустой список
Вариант 3: Senior
Настоящий спец в Python вспомнит также, что функция enumerate принимает необязательный аргумент start, а с помощью list можно избавиться от создания пустого списка и операции append.
class Answer:
def tuple_creator(self, arr, n):
return list(enumerate(arr, start = n))
328 views17:10