Работа с последовательностями как с массивами
Индекс и значение (номер и число)
Сохраним последовательность целых чисел в памяти, чтобы мы могли перебрать ее много раз. Будем называть такую последовательность массивом. В питоне нет типа "массив". Но есть тип list (список, значения - любые типы) и str - строка (значения только символы).
a = list(map(int, input().split()))
или зададим ее не с клавиатуры, а определим прямо в программе:
a = [3, 7, -2, 10]
print(a) # [3, 7, -2, 10]
Если последовательность чисел хранится в памяти, мы можем обратиться к любому ее элементу в любом порядке по индексу (номеру элемента в последовательности.
+---+---+---+---+---+---+
x | P | y | t | h | o | n | значение (число), value
+---+---+---+---+---+---+
i 0 1 2 3 4 5 6=len номер (index)
-6 -5 -4 -3 -2 -1
Переберем последовательсть (строку), печатая значения (буквы) и их номера в строке. Используем для этого enumerate
len - вычислить длину последовательности (функция языка питон).
a = 'python'
for i, x in enumerate(a):
print(i, x)
print('length =', len(a))
# Output:
# 0 p
# 1 y
# 2 t
# 3 h
# 4 o
# 5 n
# length = 6
a[i] - доступ к любому элементу массива
массив[номер] - обращение к элементу массива. Так можно читать, так можно писать в массив.
a = [3, 5, -2, 10]
print(a) # [3, 5, -2, 10]
x = a[1] # x = 5
a[0] = 77
print(a) # [77, 5, -2, 10]
a[1] = a[2] + a[0] # a[1] = -2 + 77
print(a) # [77, 75, -2, 10]
a[-1] = 8
print(a) # [77, 75, -2, 8]
Перебираем
Зададим список a = [3, 5, -2, 10]
и переберем его всеми известными способами.
enumerate - номер, значение
for i, x in enumerate(a):
print(i, x)
# Output:
# 0 3
# 1 5
# 2 -2
# 3 10
for..in - только значение
Номер не печатаем.
for x in a:
print(x)
# Output:
# 3
# 5
# -2
# 10
range(len(a)) - только номера
По номеру i
можно найти значение a[i]
.
for i in range(len(a)):
print(i, a[i])
# Output:
# 0 3
# 1 5
# 2 -2
# 3 10
Срез (slice) - часть списка
Можно обратиться к части массива от номера i (включая) до номера j (не включая). Математики запишут это как [i, j) Программисты запишут срез (slice) a[i:j] и сделают новый список.
>>> a = [3, 5, -2, 10, 8, 1, 17]
>>> a[3]
10
>>> a[1:4]
[5, -2, 10]
>>> a[-5:-2]
[-2, 10, 8]
У срезов есть (как у range) третий аргумент - шаг.
a[i:j:k] - взять срез списка a от i (включая) до j (НЕ включая) с шагом (прибавить) k.
>>> a = [3, 5, -2, 10, 8, 1, 17]
>>> a[1:6:2]
[5, 10, 1]
>>> a[-2:-5:-1]
[1, 8, 10]
Можно не писать номер начала или номер конца среза. Тогда это будет "начало" и "конец" списка.
>>> a = [3, 5, -2, 10, 8, 1, 17]
>>> a[:4]
[3, 5, -2, 10]
>>> a[3:]
[10, 8, 1, 17]
>>> a[:4:2]
[3, -2]
>>> a[3::2]
[10, 1]
>>> a[::2]
[3, -2, 8, 17]
>>> a[::-1]
[17, 1, 8, 10, -2, 5, 3]
Как напечатать список
Дан список a = [3, 5, -2, 10]
. Надо его напечатать.
Как пишут в программе:
print(a) # [3, 5, -2, 10]
В столбик:
for x in a:
print(x)
# Output:
# 3
# 5
# -2
# 10
В строку, используем аргумент end функции print:
for x in a:
print(x, end=' ') # печатаем через пробел
print() # в конце 1 раз - новая строка
В строку, используя оператор * (развернуть список в его элементы):
a = [3, 5, -1, 10]
print(a) # [3, 5, -1, 10]
print(*a) # 3 5 -2 10
Внимание! В проверяющей системе, если говорится о последовательности чисел, ее можно печатать или в строку, или в столбец.