Top.Mail.Ru

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!

Добавить комментарий

Sidebar