Списки в Python - 2
Срезы
Со списками, так же как и со строками, можно делать срезы. А именно:
A[i:j] срез из j - i элементов A[i], A[i + 1], ..., A[j - 1].
A[i:j:-1] срез из i-j элементов A[i], A[i - 1], ..., A[j + 1] (то есть меняется порядок элементов).
A[i:j:k] срез с шагом k: A[i], A[i + k], A[i + 2 * k],... . Если значение k < 0, то элементы идут в противоположном порядке.
Каждое из чисел i или j может отсутствовать, что означает «начало строки» или «конец строки»
Списки, в отличии от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Но можно менять и целиком срезы. Например:
A = [1, 2, 3, 4, 5]
A[2:4] = [7, 8, 9]
Получится список, у которого вместо двух элементов среза A[2:4] вставлен новый список уже из трех элементов. Теперь список стал равен [1, 2, 7, 8, 9, 5].
A = [1, 2, 3, 4, 5, 6, 7]
A[::-2] = [10, 20, 30, 40]
Получится список [40, 2, 30, 4, 20, 6, 10]. Здесь A[::-2] — это список из элементов A[-1], A[-3], A[-5], A-7, которым присваиваются значения 10, 20, 30, 40 соответственно.
Если не непрерывному срезу (то есть срезу с шагом k, отличному от 1), присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдет ошибка ValueError.
Обратите внимание, A[i] — это элемент списка, а не срез!
Операции со списками
Со списками можно легко делать много разных операций.
x in A | Проверить, содержится ли элемент в списке. Возвращает True или False |
x not in A | То же самое, что not(x in A) |
min(A) | Наименьший элемент списка |
max(A) | Наибольший элемент списка |
A.index(x) | Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError |
A.count(x) | Количество вхождений элемента x в список |
Задачи
Большинство упражнений этого листка копирует задачи предыдущего листка. Но в предыдущем листке задачи необходимо решать без использования срезов, дополнительных списков, методов списков.
В этом же листке, наоборот, нельзя использовать циклы. Используйте срезы и методы.
Для многих упражнений написано, какое наибольшее число строк может быть в программе. Как правило, ограничения будут или в одну строку, или в три строки.
Если программа решается в одну строку, то необходимо использовать функции внутри функций. Например, вот так можно вычислить сумму всех чисел, введенных в строку, используя стандартную функцию sum:
print(sum(map(int, input().split())))
Обратите внимание, в однострочном решении нельзя сохранять список в переменной - нужно сразу же его обработать и вывести результат.
Решение в две строки строки, как правило, должно иметь следующий вид:
A = input().split() print(' '.join(...))
При этом зачастую не требуется преобразовывать элементы списка к типу int.
Решение в три строки строки, как правило, должно иметь следующий вид:
A = input().split() A = ... print(' '.join(...))
A: Четные индексы
Решите эту задачу в одну строку
Примеры
Ввод | Вывод |
1 2 3 4 5 | 1 3 5 |
G: Наибольший элемент
Решите эту задачу в две строки
Примеры
Ввод | Вывод |
1 2 3 2 1 | 3 2 |
L: Вывести в обратном порядке
Решите эту задачу в одну строку
Примеры
Ввод | Вывод |
1 2 3 4 5 | 5 4 3 2 1 |
N: Переставить соседние
Решите эту задачу в три строки
Примеры
Ввод | Вывод |
1 2 3 4 5 | 2 1 4 3 5 |
O: Циклический сдвиг вправо
Решите эту задачу в две строки
Примеры
Ввод | Вывод |
1 2 3 4 5 | 5 1 2 3 4 |
Q: Удалить элемент
Решите эту задачу в три строки
Примеры
Ввод | Вывод |
7 6 5 4 3 2 1 2 |
7 6 4 3 2 1 |
R: Вставить элемент
Решите эту задачу в три строки
Вторая строка — такая: n, elem = map(int, input().split()).
Примеры
Ввод | Вывод |
7 6 5 4 3 2 1 2 0 |
7 6 0 5 4 3 2 1 |
Z: Большой сдвиг
Решите эту задачу в две строки
Примеры
Ввод | Вывод |
5 3 7 4 6 3 |
7 4 6 5 3 |