Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Списки
16.6. Методы списков
Python предоставляет методы, которые оперируют со списками. Например,
append добавляет новый элемент в конец списка:
>>> t = ['a', 'b', 'c'] >>> t.append('d') >>> print t ['a', 'b', 'c', 'd'] >>>
extend принимает в качестве аргумента список и добавляет все элементы:
>>> t1 = ['a', 'b', 'c'] >>> t2 = ['d', 'e'] >>> t1.extend(t2) >>> print t1 ['a', 'b', 'c', 'd', 'e']
sort организует элементы списка от низших к высшим:
>>> t = ['d', 'c', 'e', 'b', 'a'] >>> t.sort() >>> print t ['a', 'b', 'c', 'd', 'e']
Большинство методов списка не имеют типа (void), они изменяют список и возвращают None. Если вы случайно напишете t = t.sort(), то результат вас разочарует.
16.7. Удаление элементов
Существует несколько подходов для удаления элементов из списка. Если известен индекс элемента, можно воспользоваться pop:
>>> t = ['a', 'b', 'c'] >>> x = t.pop(1) >>> print t ['a', 'c'] >>> print x b >>>
pop изменяет список и возвращает элемент, который был удален. Если не указан индекс, то удаляется и возвращается последний элемент списка.
Если вам не нужно сохранять значение, можно воспользоваться оператором del:
>>> t = ['a', 'b', 'c'] >>> del t[1] >>> print t ['a', 'c']
Если вы знаете элемент, который хотите удалить (но не его индекс), можно воспользоваться remove:
>>> t = ['a', 'b', 'c'] >>> t.remove('b') >>> print t ['a', 'c']
remove возвращает значение None.
Для удаления больше, чем одного элемента, можно использовать del со срезом индекса:
>>> t = ['a', 'b', 'c', 'd', 'e', 'f'] >>> del t[1:5] >>> print t ['a', 'f']
16.8. Списки и функции
Существует несколько встроенных функций, которые могут быть использованы для списков, они позволяют быстро просмотреть список без написания собственного цикла:
>>> nums = [3, 41, 12, 9, 74, 15] >>> print len(nums) 6 >>> print max(nums) 74 >>> print min(nums) 3 >>> print sum(nums) 154 >>> print sum(nums)/len(nums) 25.666666666666668
Функция sum() работает только, когда все элементы списка числовые. Другие функции (max(), len() и т.д.) работают со списками строк и другими типами, которые могут быть сопоставимы.
Мы можем переписать программу, которая рассчитывала среднее значение чисел в списке с использованием списка.
Сначала программа, подсчитывающая среднее значение, без списка:
total = 0 count = 0 while ( True ) : inp = raw_input('Enter a number: ') if inp == 'done' : break value = float(inp) total = total + value count = count + 1 average = total / count print 'Average:', average
Можем просто запомнить каждое число, которое вводит пользователь и с использованием встроенной функции подсчитать sum и count в конце.
numlist = list() while ( True ) : inp = raw_input('Enter a number: ') if inp == 'done' : break value = float(inp) numlist.append(value) average = sum(numlist) / len(numlist) print 'Average:', average
Мы создали пустой список перед началом цикла и затем каждый раз добавляли число в этот список.
16.9. Списки и строки
Строка - последовательность символов, список - последовательность значений, но список символов - это не тоже самое, что строка. Преобразовать строку в список символов можно с помощью list:
>>> s = 'spam' >>> t = list(s) >>> print t ['s', 'p', 'a', 'm']
Т.к. list - это имя встроенной функции, вы должны избегать его использование в качестве имени переменной. Я избегаю использовать l, т.к. это похоже на 1, поэтому я использую t.
Функция list разбивает строку на отдельные буквы. Если вы хотите разбить строку на слова, вы можете использовать метод split:
>>> s = 'pining for the fjords' >>> t = s.split() >>> print t ['pining', 'for', 'the', 'fjords'] >>> print t[2] the
При вызове split можно передать аргумент, который задает разделитель (delimiter), вместо пробела по умолчанию:
>>> s = 'spam-spam-spam' >>> delimiter = '-' >>> s.split(delimiter) ['spam', 'spam', 'spam']
join - противоположность split, он принимает список строк и объединяет элементы.
>>> t = ['pining', 'for', 'the', 'fjords'] >>> delimiter = ' ' >>> delimiter.join(t) 'pining for the fjords'
В этом случае разделителем является пустая строка, поэтому join помещает пробелы между словами. Чтобы соединить строки без пробелов, в качестве разделителя необходимо использовать пустую строку.