Продолжаем урок Работа со списками. На прошлом уроке я писал о том, что добавить элемент в список можно командой append. Она добавляет в конец списка. Но что если надо добавить в середину? Тогда используем insert, он вставляет перед указанной позицией:
ls=[1,2,3,10,"sdfds",44,11] ls.insert(0,'FFF') print(ls) ls.insert(1,'sss') print(ls) ls.insert(3,3.14) print(ls)
Программа выдаст:
[‘FFF’, 1, 2, 3, 10, ‘sdfds’, 44, 11]
[‘FFF’, ‘sss’, 1, 2, 3, 10, ‘sdfds’, 44, 11]
[‘FFF’, ‘sss’, 1, 3.14, 2, 3, 10, ‘sdfds’, 44, 11]
Еще можно обратиться к любому элементу списка, одновременно удаляя его (как бы извлекая элемент из списка):
ls=[1,2,3,10,"sdfds",44,11] print(ls.pop(2)) print(ls) print(ls.pop()) print(ls)
Программа выдаст
3
[1, 2, 10, ‘sdfds’, 44, 11]
11
[1, 2, 10, ‘sdfds’, 44]
Отсутствие аргумента у команды pop означает, что элемент будет извлечен с конца списка. Такая возможность очень удобно для организации всяких стеков.
Для поиска элементов можно использовать метод index, который возвращает порядковый номер первого найденного элемента, счет начинается с нуля. Можно задать область поиска, от и до:
ls=[10,1,2,3,10,"sdfds",44,11,10,33,22] print(ls.index(10)) print(ls.index(10,1,5))
Программа выдаст:
0
4
Если элемент не найден, то произойдет прерывание выполнение выполнения программы с сообщением об ошибке, типа такого:
Traceback (most recent call last):
File «E:/Самообразование/Питон/Списки/ls15.py», line 4, in <module>
print(ls.index(10,1,2))
ValueError: 10 is not in list
Возникает вопрос, а как быть, если мы не знаем, есть ли у нас в списке заданный элемент? Не хотелось бы, чтобы при выполнения метода index у нас вылетело с ошибкой. Это можно проверить, например, командой count, которая считает количество элементов в списке:
ls=[10,1,2,3,10,"sdfds",44,11,10,33,22] print(ls.count(10)) print(ls.count(11)) print(ls.count(12))
Программа выдаст:
3
1
0
Еще списки можно сортировать:
ls=[10,1,2,3,10,44,11,10,33,22] print(ls) ls.sort() print(ls)
Программа выдаст:
[10, 1, 2, 3, 10, 44, 11, 10, 33, 22]
[1, 2, 3, 10, 10, 10, 11, 22, 33, 44]
Но что, если надо отсортировать в обратном порядке? И это можно. Есть несколько способов. Например, можно применить метод reverse:
ls=[10,1,2,3,10,44,11,10,33,22] print(ls) ls.sort() ls.reverse() print(ls)
Программа выдаст:
[10, 1, 2, 3, 10, 44, 11, 10, 33, 22]
[44, 33, 22, 11, 10, 10, 10, 3, 2, 1]
Можно сделать еще вот:
ls=[10,1,2,3,10,44,11,10,33,22] print(ls) ls.sort(reverse=True) print(ls)
Результат будет точно такой же.
Что будет, если мы попробуем отсортировать массив из строк?:
ls=["Иванов","Яблонев","Сидоров","Баракутов","Петров","Смирнова"] print(ls) ls.sort() print(ls)
Программа отсортирует их по алфавиту:
[‘Иванов’, ‘Яблонев’, ‘Сидоров’, ‘Баракутов’, ‘Петров’, ‘Смирнова’]
[‘Баракутов’, ‘Иванов’, ‘Петров’, ‘Сидоров’, ‘Смирнова’, ‘Яблонев’]
А если мы хотим отсортировать, допустим, по длине строки? В этом случае мы можем написать свою функция для вычисления ключа сортировки и передать ее в метод sort:
#Функция сортировки по длине
def sortByLength(inputStr):
return len(inputStr) # Ключом является длина каждой строки, сортируем по длине
ls=["Иванов","Яблонев","Сидоров","Баракутов","Петров","Смирнова"]
print(ls)
ls.sort(key=sortByLength)
print(ls)
Вот что выдаст наша программа:
[‘Иванов’, ‘Яблонев’, ‘Сидоров’, ‘Баракутов’, ‘Петров’, ‘Смирнова’]
[‘Иванов’, ‘Петров’, ‘Яблонев’, ‘Сидоров’, ‘Смирнова’, ‘Баракутов’]
Таким образом, благодаря возможности указать свою функцию вычисления ключа, мы можем сортировать вообще разные структуры данных, например, объекты.
Все комментарии
Чтобы оставить комментарий, необходимо войти или зарегистрироваться.
Пока нет комментариев. Будьте первым!