Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 4654 / 500 | Длительность: 21:48:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 8:

Списки

< Самостоятельная работа 1 || Самостоятельная работа 8: 12345

16.3. Обход списка

Наиболее общий путь обхода элементов списка - использование цикла for.

Похожий синтаксис используется для обхода строк:

>>> for cheese in cheeses:
           print cheese
           
           
Cheddar
Edam
Gouda

Это замечательно работает, если вам необходимо прочитать элементы списка. Но если вы хотите записать или обновить элементы, понадобятся индексы. Общий подход, чтобы это сделать - объединить функции range и len:

>>> for i in range(len(numbers)):
              numbers[i] = numbers[i] * 2
              
>>> print numbers
[34, 10]

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

При обходе пустого списка в цикле for никогда не выполнится тело цикла:

>>> for x in empty:
           print 'This never happens.'

Хотя список может содержать другой список, вложенный список считается одним элементом. Длина списка будет равна четырем:

>>> len(['spam', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]])
4

16.4. Операторы списка

Оператор + объединяет списки:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = a + b
>>> print c
[1, 2, 3, 4, 5, 6]

Аналогичным образом, оператор * повторяет список заданное число раз:

>>> [0] * 4
[0, 0, 0, 0]
>>> [1,2,3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

16.5. Срез списка

Оператор среза также работает для списков:

>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> t[1:3]
['b', 'c']
>>> t[:4]
['a', 'b', 'c', 'd']
>>> t[3:]
['d', 'e', 'f']

Если опустить первый индекс, то срез начнется с начала. Если опустить второй - срез закончится в конце. Если опустить оба значения, то срез будет являться копией всего списка.

>>> t[:]
['a', 'b', 'c', 'd', 'e', 'f']

Т.к. списки можно изменять то, часто создается копия перед выполнением операций, которые складывают, удлиняют или искажают списки.

Оператор среза в левой части выражения может обновить несколько элементов:

>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> t[1:3] = ['x','y']
>>> print t
['a', 'x', 'y', 'd', 'e', 'f']
< Самостоятельная работа 1 || Самостоятельная работа 8: 12345
Ксения Шошина
Ксения Шошина

курс Программирование на Python

Илья Кизилов
Илья Кизилов

В лекции приводится программа для сортировки слов по их длинне. В коде ошибка. Я исправил так:

def sort_by_length(words):

words = words.split()

t = []

for word in words:

t.append((len(word), word))

t.sort(reverse=True)

res = []

for length, word in t:

res.append(word)

return res

print(sort_by_length(words))

 

Кто ещё как сделал?

 

Андрей Коробейников
Андрей Коробейников
Россия, Новосибирск, Сибирский государственный университет телекоммуникаций и информатики, 1999