вторник, 28 апреля 2020 г.

Массивы

Массивы

Классический массив:

это упорядоченная группа однотипных данных, определенного размера (количества элементов) и имеющих общее имя.
Особенности:
  • отпадает необхожимость именования каждого элемента данных (у всех одно имя, например - X)
  • каждый элемент имеет уникальный номер/индекс: X[5] - 5-й элемент в X
  • расположенных в памяти рядом (в соседних ячейках)
  • для компьютера - прямой, быстрый, доступ к элементам. Например, для X[5]:
    <адрес в памяти> = <адрес начала X> + <размер типа> × <номер (5)>
Недостатки:
  • выделение в памяти, заранее определенного, пространства для хранения своих элементов:
    • нельзя увелечить (а может понадобиться больше)
    • нельзя уменьшит (а может понадобиться меньше - неэффективно)
  • все элементы массива должны быть одного типа

Массив = таблица

Для X = [9,11,25,34,41,52]
012345
значение:91125344152

Списки в Python

  • упорядоченная группа, изменяемого размера, любых объектов и имеющих общее имя.
Списки позволяют избавиться от перечисленных недостатков массивов. Приобретается только один : теряется прямой доступ в памяти - медленней!

Создание списков:

In [77]:
# Пустых:
X = []
A = list()
print(X,A)
[] []
In [78]:
# Перечислением элементов:
X = [1, 2, 3]
A = [1,2] + [3,4]
print(X,A)
[1, 2, 3] [1, 2, 3, 4]
In [30]:
# Из других списков:
X = [1, 2, 3]
A = X + [X[2]] + X[:2] + X[2:] + X[::2]
# [2] - один элемент, но каждый должен быть списком => [X[2]] 
print(X,A)
[1, 2, 3] [1, 2, 3, 3, 1, 2, 3, 1, 3]
In [33]:
# Повторением:
X = [1, 2, 3]
A = X * 2
Y = [0] * 5
print(A, Y)
[1, 2, 3, 1, 2, 3] [0, 0, 0, 0, 0]
In [80]:
# Из арифметичекой прогрессии:
X = list( range(10) )
A = list( range(10, 20) )
Y = list( range(10, 21, 2) )
print(X, A, Y, sep='\n')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[10, 12, 14, 16, 18, 20]
In [51]:
# С помощью генератора списка:
X = [ i for i in range(10) ]
A = [ i*i for i in range(10) ]
Y = [ i*i for i in range(10) if i%3 == 0 ]
from random import randint
Z = [ randint(10,100)  for i in range(10) ]
print(X, A, Y, Z, sep='\n')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 9, 36, 81]
[74, 96, 11, 15, 29, 15, 33, 32, 97, 23]

Вставка элементов

In [60]:
A = []
X = [1, 2, 3]
# Добавление одного элемента:
X.insert(2,5)  # по индексу 2 - добавить 5
A.append(X[2]) # добавить в конец
# Расширение элементами:
A.extend(X[:2])
print(X, A)
[1, 2, 5, 3] [5, 1, 2]

Удаление элементов

In [61]:
X.pop() # удалить последний
print(X)
[1, 2, 5]
In [62]:
X.pop(0) # удалить первый
print(X)
[2, 5]
In [65]:
A = [ 2, 3, 4, 3 ]
A.remove(3) # Удалить первый со значением 3
print(A)
[2, 4, 3]

Ввод и вывод

In [81]:
X = [
    int(
        input(
            f'X[{i}] = '
            )
    )
    for i in 
            range(
                int( 
                    input(
                        'Введите количество элементов:'
                    ) 
                )
            )
]
print( X )
print( *X )
print( *X , sep='\n')
Введите количество элементов:5
X[0] = 2
X[1] = 4
X[2] = 3
X[3] = 5
X[4] = 4
[2, 4, 3, 5, 4]
2 4 3 5 4
2
4
3
5
4
In [82]:
X = list( map( int, input().split()) ) # ввод одной строкой
print( *X , sep=' : ')
4 7 5
4 : 7 : 5
In [75]:
X = map( int, input().split(' : ')) # ввод одной строкой
print( *X , sep=' ')
1 : 2 : 3
1 2 3

Подсчёт количества нужных элементов

Задача. В массиве записаны данные о росте баскетболистов. Сколько из них имеет рост больше 180 см, но меньше 190 см?
In [99]:
x = [randint(170,200) for __ in range(10)]
print(*x)
print( *[i for i in x if  180<i<190 ] )
200 181 180 181 189 199 174 172 179 179
181 181 189

Сумма

In [100]:
sum( [i for i in x if  180<i<190 ]  )
Out[100]:
551

Максимальный элемент

Найдите (за один проход) количество элементов, имеющих максимальное значение
In [108]:
x = [ randint( 10, 15 ) for __ in range(10) ]
print( *x )
m = -1
for i in range( len(x) ):
    if x[i] > m:
        m = x[i]
        k = 1
    elif x[i] == m:
        k += 1
print(k)
14 12 11 12 11 10 14 11 12 14
3

Задания

№1

Заполните массив случайными числами в интервале [0,100] и подсчитайте отдельно среднее значение всех элементов, которые
Пример:
Массив: 3 2 52 4 60
Ср. арифм. элементов [0,50): 3.000
Ср. арифм. элементов [50,100]: 56.000

№2

Заполните массив случайными числами. Определить, есть ли в нем элементы с одинаковыми значениями, не обязательно стоящие рядом.
Пример:
Массив: 3 2 1 3 2 5
Есть: 3, 2
Пример: Массив: 3 2 1 4 0 5
Нет

№3

Заполнить массив случайными числами и найти минимальный и максимальный элементы массива и их номера.
Пример:
Массив: 1 2 3 4 5
Минимальный элемент: A[1]=1
Максимальный элемент: A[5]=5

Комментариев нет:

Отправить комментарий

AI