Следующая: , Предыдущая: while, Вверх: Top


9 Списки

Во всех реальных программах приходится иметь дело не с отдельными переменными, а с наборами данных. Например, база данных учащихся школы — это набор данных, содержащих их фамилии, имена, классы; файл, редактируемый в текстовом редакторе хранится в виде набора строк и т.д. Для хранения большого числа данных (как правило, однородных) используются структуры, которые во многих языках программирования называются массивами. Массивы в Питоне называются списками, потому что они поддерживают ряд дополнительных операций, не присущих стандартным массивам.

В предыдущем листке рассказывалось, что список можно задать перечислив его элементы в квадратных скобках через запятую, либо при помощи функции input, если пользователь введет список в таком же виде, либо можно создать список при помощи функции range. Например, если необходимо, чтобы переменная A была списком из n элементов, это можно сделать при помощи присваивания A=range(n). Распечатать элементы массива можно при помощи инструкции print.

Внимание! Если при вводе списка не заключить его в квадратные скобки, а просто перечислить его элементы через запятую, то будет создан объект, называемый кортежем. Его главное отличие от списков заключается в том, что элементы кортежа нельзя изменять. При попытке присвоить элементу кортежа новое значение будет выдана ошибка "TypeError: object doesn't support item assignment" (Ошибка типа: объект не поддерживает возможность изменения элемента). В случае возникновения таких ошибок будет говориться "смотри листочек".

Обратиться (узнать значение или изменить) элемент с номером i списка A можно используя оператор []: A[i]. Элементы списка нумеруются, начиная с 0, то есть если в списке есть n элементов, то начальный элемент списка имеет номер 0, а конечный номер n-1. Как правило, номера элементов списка называются индексами (произносится "элемент с индексом 0"). Узнать количество элементов в списке A можно при помощи функции len(A). Таким образом, распечатать список поэлементно можно при помощи следующей программы:

     A=input("Введите список: ")
     for i in range(0,len(A)):
         print "Элемент с номером", i, "равен", A[i]

В данном примере если список A состоит из n элементов, то переменная i принимает значения от 0 до n-1, то есть всевозможные значения индексов списка. В следующем примере используется аналогичный цикл для того, чтобы удвоить все элементы списка:

     A=input("Введите список: ")
     for i in range(0,len(A)):
         A[i]=2*A[i]

Также можно использовать отрицательные значения индекса для нумерации элементов с конца списка: A[-1] обозначает последний элемент списка A, A[-2] — второй с конца и т.д. до первого элемента A[-len(A)]. При попытке обратиться к списку из n элементов по индексу, большему, чем n-1 или меньшему, чем -n, будет выдана ошибка IndexError: list index out of range (значение индекса списка выходит за допустимый диапазон). Такая ошибка является весьма типичной.

Упражнения

Во всех упражнениях предполагается, что список вводится пользователем, как в рассматриваемых примерах. Нельзя использовать дополнительные списки.

Во многих упражнениях также следует предполагать, что список состоит из чисел.

  1. Выведите на экран все элементы списка с четными индексами.
  2. Выведите на экран все элементы списка с нечетными индексами.
  3. Выведите на экран все элементы списка с индексами, делящимися на 3.
  4. Найдите сумму четных элементов списка.
  5. Найдите количество положительных элементов списка.
  6. Найдите количество элементов списка, которые больше предыдущего.
  7. Определите, есть ли в этом списке два соседних элемента с одинаковыми знаками.
  8. Определите, есть ли в этом списке два соседних элемента, значения которых различаются не более, чем на 1.
  9. Определите, есть ли в этом списке элемент, который больше обоих своих соседей.
  10. Переставьте элементы списка в обратном порядке.
  11. Переставьте соседние элементы списка (0-й с 1-м, 2-й с 3-м и т.д.)
  12. Циклически сдвиньте элементы списка вправо (0-й элемент становится 1-м, 1-й становится 2-м, ..., последний становится 0-м).
  13. Найдите наибольший элемент в списке.
  14. Найдите наименьший элемент в списке.
  15. Найдите второй по величине элемент в списке. Кратность вхождения элементов не учитывать, то есть для списка [1,2,3,4,1,2,3,4] программа должна выводить 3.
  16. Найдите количество элементов списка, равных наибольшему.
  17. Дан список A и число x. Вычислите значение многочлена, коэффициенты которого записаны в списке A в точке x, то есть A[0]+A[1]x +A[2]x2 +...+A[n-1]xn-1 . Количество действий не должно превосходить Cn (то есть должно быть пропорционально степени многочлена). Поскольку оператор возведения в степень ** выполняется более, чем за одну операцию, то использовать его в программе нельзя.