В прошлом уроке мы создали список, содержащий объекты ball для отработки приемов работы со списками.
В конце урока я дал задания по удалению элементов из списка. Эти задания должны были вызвать проблемы.
Прежде, чем мы вернемся к шариками, нужно рассмотреть вариант попроще: список, состоящий из чисел.
Этот урок будет полностью посвящен работе с числовым списком.
a = [1,2,3,4,5,6] print(a)
Это создаст список, заполненный числами по-порядку.
А вот так можно заполнить список случайными значениями:
from random import randrange as rnd a = [] for z in range(12): a += [rnd()]
Обратите внимание на квадратные скобки. Попробуйте запустить без них и посмотрите на ошибку. Запомните ее, с ней, скорее всего, вы столкнетесь еще не один раз. К списку можно добавить только список (последовательность) и нельзя добавлять числовое значение.
Выполним несколько простых заданий:
1. Найдем сумму всех чисел:
s = 0 for x in a: s += x print(s)
Для числового списка есть и более простой вариант — использование встроенной функции sum:
print(sum(a))
2. Найдем сумму только тех элементов списка, которые больше 5:
s = 0 for x in a: if x > 5: s += x print(x)
3. Количество элементов, которые больше первого:
k = 0 for x in a: if x > a[1]: k += 1 print(k)
4. Количество элементов, которые больше последнего:
k = 0 for x in a: if x > a[-1]: k += 1 print(k)
5. Удалить последний элемент (первый способ):
a.pop() print(a)
6. Удалить последний элемент (второй способ):
a = a[:-1] print(a)
7. Удалить первые 5 элементов:
a = a[5:] print(a)
На самом деле я уже перешел к дублированию информации из справочника, чего делать не стоит. Попробуем задачу посложнее: удалить все элементы, которые равны 0.
Первая мысль, которая приходит в голову:
for x in a: if x == 0: ???
Что-то надо делать, если нашли элемент, который равен нулю. Надо бы его удалить, но как указать списку, какой элемент удалять? Как вариант, можно использовать метод remove, который удаляет элемент по значению, а не по позиции, но в этом случае не нужно смотреть на значение элемента:
for k in range(a.count(0)): a.remove(0)
Но вернемся к предыдущему варианту, в котором мы перебирали список, находили элемент равный нулю и пытались его удалить. Удалить можно по номеру, с помощью метода pop (см. справочник), но для этого нам нужно перебирать список не по значениям, а по номерам:
for i in range(len(a)): if a[i] == 0: a.pop(i)
Работает? Если работает, запустите еще раз, потому что не должно работать.
Предлагаю подумать, почему не работает, и как с этим быть. Ответ — в следующем уроке.
А пока задания для тренировки:
2. Найти сумму элементов, которые больше первого элемента
3. Найти количество элементов, равных последнему элементу
4. Удалить первые три элемента
5. Удалить последние два элемента
6. Удалить элементы, стоящие на нечетных местах
7. Посчитать количество положительных, которые идут после отрицательных.
Используйте a = [rnd(-10,11) for x in range(12)] для получения списка с отрицательными и положительными значениями.
8. Посчитать, сколько пар из повторяющихся подряд элементов
9. Заполнить список значениями по-порядку, начиная с 1
10. Заполнить список значениями в обратном порядке, до 1
11*. Заполнить список значениями по парам с обоих концов:
1 3 5 7 9 10 8 6 4 2
12*. Найти значение самого большого элемента
13*. Удалить самый большой элемент
14*. Удалить самый маленьких, и все равные ему
15*. Удалить все элементы, равные нулю
16*. Удалить все отрицательные
17*. Все отрицательные сделать положительными
18*. Все нули заменить на сумму соседних (для крайних нулей брать значения с другой стороны списка)
19*. Найти значение, наименее отличающееся от среднего арифметического всего списка
Некоторые из этих заданий могут показаться сложными и вызовут вопросы.
Задавайте вопросы в комментариях. И наберитесь терпения — в ближайших уроках я дам все объяснения. А пока просто попытайтесь придумать ответ или, хотя бы, понять в чем проблема.
Знания должны приходить на подготовленную почву. Только усилия двигают вас вперед. Даже те усилия, в результате которых вы не находите правильного решения!
Желаю удачи в поисках ответа!
One thought on “24. Работа со списками в Python, часть вторая”