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

Списки

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

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 помещает пробелы между словами. Чтобы соединить строки без пробелов, в качестве разделителя необходимо использовать пустую строку.

< Самостоятельная работа 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))

 

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

 

Irina Muraveyova
Irina Muraveyova
Россия, RF
Владимир Романов
Владимир Романов
Россия, Курган, Курганский Государственный Университет, 2012