Список пустой?
Как проверить, что список a не пустой?
Плохо:
if len(a) > 0:
print('НЕ пустой список')
Хорошо:
if a:
print('НЕ пустой список')
Изменение списков
Список можно изменять.
a.append(x) - добавить 1 элемент в список
a = [3, 7, -1]
print(a) # [3, 7, -1]
a.append(5)
a.append(0)
print(a) # [3, 7, -1, 5, 0]
a.extend(b) - добавить в конец списка a список b
a = [3, 7, -1]
print(a) # [3, 7, -1]
a.extend([5, 0])
print(a) # [3, 7, -1, 5, 0]
a+b - новый список
Складывая списки a+b получаем новый список. a и b не изменяются.
a = [3, 7, -1]
b = [5, 0]
c = a + b
print(a) # [3, 7, -1]
print(b) # [5, 0]
print(c) # [3, 7, -1, 5, 0]
a += b это a.extend(b)
a = [3, 7, -1]
b = [5, 0]
a += b
print(a) # [3, 7, -1, 5, 0]
print(b) # [5, 0]
x = a.pop() - удалить элемент из конца списка
a = [3, 7, -1, 5]
print(a) # [3, 7, -1, 5]
x = a.pop()
print(x) # 5
print(a) # [3, 7, -1]
x = a.pop()
print(x) # -1
print(a) # [3, 7]
x = a.pop(i) - удалить элемент с НОМЕРОМ i
i - индекс (номер) элемента в списке
a = [3, 7, -1, 5]
print(a) # [3, 7, -1, 5]
x = a.pop(0)
print(x) # 3
print(a) # [7, -1, 5]
x = a.pop(1)
print(x) # -1
print(a) # [7, 5]
Примеры
Скалярное умножение векторов
Повторим, что уже знаем:
def scal(a, b):
res = 0
for i in range(len(a)):
res = res + a[i]*b[i]
return res
a = [3, 7, -1]
b = [2, 1, 10]
x = scal(a, b)
print(a) # [3, 7, -1]
print(b) # [2, 1, 10]
print(x) # 2*3 + 7*1 + -1*10 = 6+7-10 = 3
Сложение векторов
Будем хранить вектора как списки. Сложим a и b, получим новый список с.
def vadd(a, b):
c = []
for i in range(len(a)):
c.append( a[i] + b[i] )
return c
a = [3, 7, -1]
b = [2, 1, 10]
x = vadd(a, b)
print(a) # [3, 7, -1]
print(b) # [2, 1, 10]
print(x) # [5, 8, 9]
Задачи
Задачи (Вьетнам)
- arr_merge - слияние отсортированных списков за О(N+M)
- arr_intersect - пересечение отсортированных списков
- arr_7 - сложение матриц
- stack_postfix - вычисление постфиксного выражения
Не обязательные:
- for_14 - правильное скобочное выражение или нет, один тип скобок
- stack_skobki - правильное скобочное выражение или нет, много типов скобок
Пример: чтение матрицы из 3 строк
def read_matrix(n)
a = []
for i in range(n):
row = list(map(int, input().split()))
print(row)
a.append(row)
print(a)
m = read_matrix(3) # читаем матрицу из 3 строк
Задачи (Mьянма)
- arr_11
- arr_10
- задача 2 "первый и второй"
- arr_2
- arr_3
Задача 2 "первый и второй"
Дан список. Сделать из него 2 списка, как показано на рисунке.
+---+---+---+
b | 1 | 2 | 0 |
+---+---+---+
| \ \
| \ \
+---+---+---+---+---+---+
a | 1 | 7 | 2 | 3 | 0 | 8 |
+---+---+---+---+---+---+
| / /
| / /
+---+---+---+
c | 7 | 3 | 8 |
+---+---+---+
Задачи специальные
Задача 1.
- Дан список a.
- Сделать список b, в котором элементы списка a от 2 до 8.
- Напечатать список a.
- Напечатать список b.
# 0 1 2 3 4 5 6 7 8 9 10
a = [2, 5, 7, 10, 13, 8, 4, 6, 11, -6, -3]
# тут нужно написать код
# ....
print(a) # [2, 5, 7, 10, 13, 8, 4, 6, 11, -6, -3]
print(b) # [7, 10, 13, 8, 4, 6, 11]
Задача 2.
- Дан список a.
- Сделать список b, в котором только положительные числа из a.
- Напечатать список a.
- Напечатать список b.
a = [2, 5, -7, 10, 13, -8, 4, 6, -11, -6, 3]
# тут нужно написать код
# ....
print(a) # [2, 5, -7, 10, 13, -8, 4, 6, -11, -6, 3]
print(b) # [2, 5, 10, 13, 4, 6, 3]
Задача 3.
- Дан список a.
- Сделать список b1, в котором только положительные числа из a.
- Сделать список b2, в котором только отрицательные числа из a.
- Напечатать список a.
- Напечатать список b1.
- Напечатать список b2.
a = [2, 5, -7, 10, 13, -8, 4, 6, -11, -6, 3]
# тут нужно написать код
# ....
print(a) # [2, 5, -7, 10, 13, -8, 4, 6, -11, -6, 3]
print(b1) # [2, 5, 10, 13, 4, 6, 3]
print(b1) # [-7, -8, -11, -6]
Задача 4.
- Дан список a.
- Дан список b такой же длины.
- Сделать список с, в котором по очереди идут числа из а и из b.
- Напечатать список a.
- Напечатать список b.
- Напечатать список c.
a = [1, 7, 4]
b = [8, 9, 3]
# тут нужно написать код
# ....
print(a) # [1, 7, 4]
print(b) # [8, 9, 3]
print(c) # [1, 8, 7, 9, 4, 3]
--
TatyanaDerbysheva - 13 Nov 2018