Список в Python: базовые операции и сортировка по фамилии

Познайте дзен Python! Сортировка по фамилии в списках — это просто и элегантно. Разбираем методы, фишки без учёта регистра и секреты данных.

Бесплатная консультация юриста

+7 (800) -02-87-29

Реклама jurik.ru

Самое главное помнить: списки (list) – это упорядоченная изменяемая коллекция элементов. Благодаря простому синтаксису и большому набору встроенных методов их удобно использовать для хранения и обработки данных, в т.ч. для сортировки по фамилии.

Содержание

  1. Что такое список в Python
  2. Базовые операции со списками
  3. Сортировка списка по фамилии
  4. Сортировка без учёта регистра
  5. Сортировка по нескольким полям
  6. Удаление дубликатов фамилий
  7. Практический пример: чтение из CSV‑файла

Что такое список в Python

Список (list) – это упорядоченная изменяемая коллекция элементов любого типа. Элементы могут быть числами, строками, другими списками, объектами и т.д.

Пример создания списка:

names = ["Иванов Иван", "Петров Петр", "Сидоров Сидр"]

Базовые операции со списками

  • Обращение по индексу: names[0] # "Иванов Иван"
  • Добавление элемента: names.append("Кузнецов Коля")
  • Вставка в произвольную позицию: names.insert(1, "Смирнова Анна")
  • Удаление элемента: names.remove("Петров Петр")
  • Получение длины: len(names)

Сортировка списка по фамилии

Часто в списке хранится строка вида "Фамилия Имя". Чтобы отсортировать такие записи по фамилии, необходимо указать key‑функцию, которая будет извлекать фамилию.

Пример 1. Список строк

people = [
 "Смирнов Алексей",
 "Иванов Иван",
 "Петров Петр",
 "Сидоров Сидр",
 "Кузнецов Коля"
]

people.sort(key=lambda s: s.split[0])

print(people)

Пример 2. Список кортежей

Если данные хранятся в виде кортежей (фамилия, имя, возраст), удобно использовать operator.itemgetter.

from operator import itemgetter

employees = [
 ("Петров", "Петр", 30),
 ("Иванов", "Иван", 25),
 ("Смирнова", "Анна", 28),
 ("Кузнецов", "Коля", 35)
]

employees.sort(key=itemgetter(0))

print(employees)

Сортировка без учёта регистра

Если в данных могут встречаться фамилии с разным регистром (например, "иванов" и "Иванов"), следует привести их к единому регистру внутри key‑функции.

people = ["иванов Иван", "Петров Петр", "Смирнова Анна", "Кузнецов Коля"]

people.sort(key=lambda s: s.split[0].lower)
print(people)

Сортировка по нескольким полям

Иногда требуется сначала сортировать по фамилии, а при одинаковой фамилии – по имени.

people = [
 "Иванов Иван",
 "Иванов Алексей",
 "Петров Петр",
 "Петров Анна",
 "Смирнова Анна"
]

people.sort(key=lambda s: (s.split[0], s.split[1]))
print(people)

Удаление дубликатов фамилий

Если в списке могут встречаться одинаковые фамилии, их удобно «очистить» с помощью dict.fromkeys (сохраняет порядок) или set (не сохраняет порядок).

people = [
 "Иванов Иван",
 "Петров Петр",
 "Иванов Алексей",
 "Смирнова Анна",
 "Петров Анна"
]

unique_by_surname = {}
for entry in people:
 surname = entry.split[0]
 if surname not in unique_by_surname:
 unique_by_surname[surname] = entry

result = list(unique_by_surname.values)
print(result)

Практический пример: чтение из CSV‑файла и сортировка по фамилии

Предположим, у вас есть файл employees.csv со следующей структурой:

Фамилия,Имя,Возраст
Иванов,Иван,25
Петров,Петр,30
Смирнова,Анна,28
Кузнецов,Коля,35
Иванов,Алексей,22

Ниже показан скрипт, который читает файл, формирует список кортежей и сортирует его по фамилии, а затем выводит результат в виде таблицы.

import csv
from operator import itemgetter

def read_csv(filepath):
 with open(filepath, newline='', encoding='utf-8') as f:
 reader = csv.DictReader(f)
 return [(row['Фамилия'], row['Имя'], int(row['Возраст'])) for row in reader]

def sort_by_surname(data):
 # Сортируем по фамилии, потом по имени
 return sorted(data, key=itemgetter(0, 1))

def print_table(data):
 print(f"{'Фамилия':