Python. Работа со списками. Продолжение.
Продолжаем урок Работа со списками. На прошлом уроке я писал о том, что добавить элемент в список можно командой 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)
Вот что выдаст наша программа:
[‘Иванов’, ‘Яблонев’, ‘Сидоров’, ‘Баракутов’, ‘Петров’, ‘Смирнова’]
[‘Иванов’, ‘Петров’, ‘Яблонев’, ‘Сидоров’, ‘Смирнова’, ‘Баракутов’]
Таким образом, благодаря возможности указать свою функцию вычисления ключа, мы можем сортировать вообще разные структуры данных, например, объекты.
Comments
So empty here ... leave a comment!