Со списками, так же как и со строками, можно делать срезы. А именно:
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) |
Наибольший элемент списка |
sum(A) |
Сумма элементов списка, элементы обязательно должны быть числами |
A.index(x) |
Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError |
A.count(x) |
Количество вхождений элемента x в список |
A.append(x) |
Добавить в конец списка A элемент x. |
A.insert(i, x) |
Вставить в список A элемент x
на позицию с индексом i. Элементы списка A,
которые до вставки имели индексы i и больше сдвигаются
вправо. |
A.extend(B) |
Добавить в конец списка A содержимое списка B. |
A.pop() |
Удалить из списка последний элемент, возвращается значение удаленного элемента |
A.pop(i) |
Удалить из списка элемент с индексом i,
возвращается значение удаленного элемента. Все элементы, стоящие
правее удаленного, сдвигаются влево. |
Просто:
a, b = map(int, input().split())
Большинство упражнений этого листка копирует задачи предыдущего листка. Но в предыдущем листке задачи необходимо решать без использования срезов, дополнительных списков, методов списков.
В этом же листке, наоборот, нельзя использовать циклы. Используйте срезы и методы.
Для многих упражнений написано, какое наибольшее число строк может быть в программе. Как правило, ограничения будут или в одну строку, или в три строки.
Если программа решается в одну строку, то необходимо использовать функции внутри функций. Например, вот так
можно вычислить сумму всех чисел, введенных в строку, используя стандартную функцию sum:
print(sum(map(int, input().split())))
Обратите внимание, в однострочном решении нельзя сохранять список в переменной — нужно сразу же его обработать и вывести результат.
Решение в две строки строки, как правило, должно иметь следующий вид:
A = input().split()
print(' '.join(...))
При этом зачастую не требуется преобразовывать элементы списка к типу int.
Решение в три строки строки, как правило, должно иметь следующий вид:
A = input().split()
A = ...
print(' '.join(...))
Решите эту задачу в одну строку.
| Ввод | Вывод |
|---|---|
1 2 3 4 5 |
1 3 5 |
Решите эту задачу в две строки.
| Ввод | Вывод |
|---|---|
1 2 3 2 1 |
3 2 |
Решите эту задачу в одну строку. Но от вас требуется только вывести входные числа в обратном порядке, а не переставлять элементы списка.
| Ввод | Вывод |
|---|---|
1 2 3 4 5 |
5 4 3 2 1 |
Решите эту задачу в три строчки.
| Ввод | Вывод |
|---|---|
1 2 3 4 5 |
2 1 4 3 5 |
Решите эту задачу в две строчки (требуется только вывести циклический сдвиг входных данных, а не переставлять список).
| Ввод | Вывод |
|---|---|
1 2 3 4 5 |
5 1 2 3 4 |
Решите эту задачу в пять строк
Первая строка - считывание данных. Вторая строка - создание списка.
Третья строка - цикл for. Четвертая строка - добавление нового элемента в список.
Пятая строка - вывод результата. Для суммирования среза списка используйте функцию sum.
| Ввод | Вывод |
|---|---|
3 6 |
17 |
100 0 |
1 |
Решите эту задачу в четыре строки
Первая строка - считывание списка. Вторая строка - цикл for
и считывание числа повторений. Третья строка - модификация списка в цикле.
Четвертая строка - вывод результата.
| Ввод | Вывод |
|---|---|
1 2 3 4 2 |
4 1 2 2 3 |