9.1. Массивы и строки
Раздел 9. Алгоритмы и программирование (продолжение)
📋 Содержание темы:
Одномерные массивы
Массив — это структура данных, хранящая набор элементов одного типа.
В Python массив реализуется с помощью списка (list).
# Создание массива a = [1, 2, 3, 4, 5] # Доступ к элементам print(a[0]) # 1 (первый элемент) print(a[-1]) # 5 (последний элемент) # Длина массива n = len(a) # 5
Способы создания массива:
# Пустой массив
a = []
# Массив из N нулей
n = 10
a = [0] * n
# Заполнение с клавиатуры
a = [int(x) for x in input().split()]
# Ввод N чисел
n = int(input())
a = []
for i in range(n):
a.append(int(input()))
Операции с массивами
a = [3, 1, 4, 1, 5]
# Перебор элементов
for x in a:
print(x)
# Перебор с индексами
for i in range(len(a)):
print(a[i])
# Сумма элементов
s = sum(a)
# Максимум / минимум
mx = max(a)
mn = min(a)
# Добавление элемента
a.append(9)
# Удаление по индексу
a.pop(2)
Поиск и сортировка
Линейный поиск:
a = [3, 1, 4, 1, 5, 9, 2, 6]
x = 5
found = False
for i in range(len(a)):
if a[i] == x:
print(f'Найден на позиции {i}')
found = True
break
Сортировка:
a = [3, 1, 4, 1, 5, 9, 2, 6] # По возрастанию a.sort() # По убыванию a.sort(reverse=True)
Пузырьковая сортировка — простейший алгоритм сортировки (O(n²)).
for i in range(len(a)):
for j in range(len(a)-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
Обработка строк
Строка — это последовательность символов. В Python строки неизменяемы.
s = "Привет, мир!"
# Длина строки
print(len(s))
# Доступ по индексу
print(s[0]) # П
print(s[-1]) # !
# Срез строки
print(s[0:6]) # Привет
# Поиск подстроки
print(s.find("мир")) # 8
# Замена
print(s.replace("мир", "Python"))
Полезные методы строк:
| Метод | Описание |
|---|---|
s.upper() | Верхний регистр |
s.lower() | Нижний регистр |
s.strip() | Удаление пробелов |
s.split() | Разделение на части |
' '.join(list) | Склеивание из списка |
Двумерные массивы (матрицы)
Двумерный массив — это массив, каждый элемент которого является массивом. Используется для представления таблиц и матриц.
Создание двумерного массива:
# Способ 1: вложенные списки
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Способ 2: создание пустой матрицы N×M
n, m = 3, 4
matrix = [[0] * m for _ in range(n)]
# Способ 3: матрица из ввода
n, m = map(int, input().split())
matrix = []
for i in range(n):
row = list(map(int, input().split()))
matrix.append(row)
Доступ к элементам:
# matrix[строка][столбец]
print(matrix[0][0]) # первый элемент (1, 2, 3) → 1
print(matrix[1][2]) # второй строка, третий столбец → 6
# Вывод всей матрицы
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j], end=' ')
print() # перевод строки
Основные операции с матрицами:
# Сумма всех элементов
total = 0
for row in matrix:
for val in row:
total += val
# Транспонирование матрицы (3×3)
transposed = [[0]*3 for _ in range(3)]
for i in range(3):
for j in range(3):
transposed[j][i] = matrix[i][j]
# Умножение матрицы на число
k = 5
result = [[val * k for val in row] for row in matrix]
Совет: При работе с матрицами удобно использовать функцию
len() для определения количества строк и столбцов: n = len(matrix), m = len(matrix[0]).Практические задачи
Задача 1: Найти второй по величине элемент
a = [3, 1, 4, 1, 5, 9, 2, 6]
first = max(a)
second = None
for x in a:
if x != first:
if second is None or x > second:
second = x
print(f"Второй по величине: {second}")
Задача 2: Подсчёт уникальных слов
text = "мама мыла раму а папа читал книгу а мама пила чай"
words = text.split()
count = {}
for word in words:
count[word] = count.get(word, 0) + 1
for word, n in count.items():
print(f"{word}: {n}")
Задача 3: Удаление дубликатов с сохранением порядка
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
seen = set()
result = []
for x in a:
if x not in seen:
seen.add(x)
result.append(x)
print(result) # [3, 1, 4, 5, 9, 2, 6]
Задача 4: Поворот матрицы на 90°
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
n = len(matrix)
rotated = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
rotated[j][n-1-i] = matrix[i][j]
# Результат: [[7,4,1],[8,5,2],[9,6,3]]
Задача 5: Объединение отсортированных массивов
def merge_sorted(a, b):
result = []
i = j = 0
while i < len(a) and j < len(b):
if a[i] <= b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
result.extend(a[i:])
result.extend(b[j:])
return result
print(merge_sorted([1,3,5], [2,4,6])) # [1,2,3,4,5,6]